从签名的applet加载Java类

时间:2008-09-13 10:51:22

标签: java applet signed downloading

如果我正在运行已签名的Java小程序,我可以从远程源(在同一个域中,甚至可能是同一个主机)加载其他类并运行它们吗?

我想在不更改页面甚至停止当前applet的情况下执行此操作。当然,所有类的总大小太大,无法一次加载它们。

有办法做到这一点吗?有没有办法通过签名小程序来实现这一点并保持其“信心”状态?

3 个答案:

答案 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)?