我有一个沙盒小程序,但这不应该有所作为。
Applet 由 2 个罐子组成。如果我将两个文件都托管在同一个 domain1 上,一切都很好。由于某些特殊情况,我需要将 jar2 托管在不同的 domain2 上。
在小程序标签中,我列出了两个文件 archive="jar1.jar, http://domain2.com/jar2.jar "。
首先,它似乎工作得很好。两个罐子都已加载,一切正常。尽管如此,只要我尝试从其中一个 jar 中访问资源(如图像),就会出现问题。
如何从我的 jar 中获取资源?我首先通过获取资源位置的 URL 来获取资源:
公共静态 URL getURL(String name) {return ResUtils.class.getResource(path);}
如果我在 domain1 上托管两个 jar,则此方法返回一个 URL。当托管在两个域上时,getURL(...) 返回 NULL,然后在获取资源时导致异常:
Caused by: java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
我猜 ResUtils.class.getResource 使用它的 Classloader 返回一个 URL。出于某种原因,在两个域上托管两个 jar 时,添加对 getRessource() 的调用返回 NULL。
所以我的问题是:
- 为什么 getURL 返回 NULL?
Java 插件是否旨在禁止在不同域中托管这些 jar?当我将 jars 托管在不同的域上时,如何加载我的资源?