我有一个理论,为什么我有以下问题,但我找不到任何证明我的理论的文档,所以我想要一些建议。重新加载DLL中的Applet在浏览器中
我有一个加载DLL的(签名)小程序。现在,上个星期五我点击“刷新”,小程序正在重新加载,包括显然重新加载DLL。但今天,打“刷新”导致以下异常:
java.lang.UnsatisfiedLinkError: Native Library XXX already loaded in another classloader
根据的Javadoc(Java 6中)的System.loadLibrary是Runtime.loadLibrary的便捷方法,并根据该文件:
如果使用相同的库名称多次调用此方法,则会忽略第二个和后续调用。
我知道并理解您无法在同一个JVM中的不同类加载器中加载相同的本机库,这解释了上述异常。我试图证明的是为什么它似乎在某一天工作,但现在不行。特别是考虑到在DLL加载周围没有任何代码改变。
所以我的假设是这样的;
- 上述文件应为“第二次和后续调用在相同的类加载器*被忽略
- 上周五*,行星是在一个不同的排列,因此在浏览器中使用不同的JVM是(或也许是相同的类加载器?)当我刷新时,所以DLL被正确加载和事情很好地运作。
- 今天行星排列不同,浏览器重复使用相同的JVM,但不同的类加载器,这解释了为什么我现在得到这个错误
顺便说一下,有问题的浏览器是IE7,我正在运行Java 1.6。我不认为浏览器版本特别重要,因为我的理解是,浏览器决定使用applet是完全由浏览器实施者决定的。
这些假设看起来是否合理和正确?我可能错过了什么?
非常感谢提前。