如果我正在运行已签名的Java小程序,我可以从远程源(在同一个域中,甚至可能是同一个主机)加载其他类并运行它们吗?
我想在不更改页面甚至停止当前applet的情况下执行此操作。当然,所有类的总大小太大,无法一次加载它们。
有办法做到这一点吗?有没有办法通过签名小程序来实现这一点并保持其“信心”状态?
答案 0 :(得分:5)
我认为类在applet中是延迟加载的。按需加载。
无论如何,如果类在jar之外,你可以简单地使用applet类加载器并按名称加载它们。例如:
ClassLoader loader = this.getClass().getClassLoader();
Class clazz = loader.loadClass("acme.AppletAddon");
如果你想从jar加载类,我想你需要用jar的url(s)创建一个新的URLClassLoader实例。
URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")};
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader());
Class clazz = loader.loadClass("acme.AppletAddon");
默认情况下,禁止小程序创建新的类加载器。但是,如果您签署您的applet并包含创建新类加载器的权限,则可以执行此操作。
答案 1 :(得分:2)
是的,您可以打开与您运行applet的主机的URL连接。您可以使用HTTP URL创建类加载器,也可以将类(作为jar)下载到用户的计算机,并在类路径中创建包含这些jar的类加载器。小程序不会停止,您不需要加载另一页。
关于信心问题的第二部分,一旦用户授予了对applet的访问权限,它就可以下载任何东西,是的,它想要本地机器。如果您的UI设计允许,您可以告知用户它正在做什么。
希望这有帮助。
答案 2 :(得分:0)
听起来应该是可能的(但我从来没有这样做过)。您是否已经看过远程方法调用(RMI)?