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

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

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

有帮助吗?

解决方案

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

无论如何,如果类位于 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");

默认情况下,小程序被禁止创建新的类加载器。但是,如果您签署您的小程序并包含创建新类加载器的权限,您就可以做到这一点。

其他提示

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

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

希望这可以帮助。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top