Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在浏览器中的小程序中重新加载DLL_Java_Dll_Applet_Java Native Interface - Fatal编程技术网

Java 在浏览器中的小程序中重新加载DLL

Java 在浏览器中的小程序中重新加载DLL,java,dll,applet,java-native-interface,Java,Dll,Applet,Java Native Interface,我有一个关于为什么我有以下问题的理论,但是我找不到任何证明我的理论的文件,所以我想要一些建议 我有一个加载DLL的(签名)小程序。现在,上周五我点击了“刷新”,小程序重新加载正常,显然包括重新加载DLL。但今天,点击“刷新”会导致以下异常: java.lang.UnsatisfiedLinkError: Native Library XXX already loaded in another classloader 根据Javadoc(Java 6)System.loadLibrary是Run

我有一个关于为什么我有以下问题的理论,但是我找不到任何证明我的理论的文件,所以我想要一些建议

我有一个加载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。我不认为浏览器版本特别重要,因为我的理解是,浏览器决定如何使用小程序完全取决于浏览器实现者

    这些假设是否合理和正确?我可能遗漏了什么

    非常感谢。

    听起来像这样

    现在他们谈论的是servlet,而不是applet,但许多相同的行为都适用

    浏览器将类加载器与url以及可能的套接字连接联系起来。因此,重新加载将重用同一个类加载器,除非浏览器长时间闲置连接,此时您将获得一个新的套接字,从而获得一个新的类加载器。我们在同一页面上有多个小应用程序,它们是否共享一个cl是一个废话页面重新加载后的ass加载程序