6

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

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

有没有办法做到这一点?有没有办法用签名的小程序来做到这一点并保持他们的“信心”状态?

4

3 回答 3

6

我认为类是在小程序中延迟加载的。按需加载。

无论如何,如果类在 jar 之外,您可以简单地使用 applet 类加载器并按名称加载它们。前任:

ClassLoader loader = this.getClass().getClassLoader();
Class clazz = loader.loadClass("acme.AppletAddon");

如果您想从 jar 加载类,我认为您需要使用 jar 的 url 创建一个 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 被禁止创建新的类加载器。但是,如果您签署您的小程序并包含创建新类加载器的权限,您就可以这样做。

于 2008-09-13T15:28:18.350 回答
2

是的,您可以打开与运行小程序的主机的 URL 连接。您可以使用 HTTP url 创建一个类加载器,或者将类(作为 jars)下载到用户的机器上,然后在类路径中使用这些 jars 创建一个类加载器。小程序不会停止,您不需要加载另一个页面。

关于您关于信心的问题的第二部分,一旦用户授予对您的小程序的访问权限,它就可以下载任何东西,是的,它想要本地机器。如果您的 UI 设计允许,您可能可以告知用户它在做什么。

希望这可以帮助。

于 2008-09-14T08:35:48.877 回答
0

听起来应该是可能的(但我从来没有做过)。您是否已经看过远程方法调用 ( RMI )?

于 2008-09-13T14:43:49.640 回答