如果我正在运行已签名的Java小程序,我可以从远程源(在同一个域中,甚至可能是同一个主机)加载其他类并运行它们吗?
我想在不更改页面甚至停止当前applet的情况下执行此操作.当然,所有类的总大小太大,无法一次加载它们.
有没有办法做到这一点?有没有办法用签名的applet做到这一点,并保持他们的"信心"状态?
我认为类在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并包含创建新类加载器的权限,则可以执行此操作.