我正在使用我自己的 JAR 文件,它使用 Java 库 (JHDF5),后者又通过 JNI 使用 dll。当我在 MATLAB 中使用我自己的 JAR 文件,然后在调试时必须重建它时,在调用 clear java
并从我的 JAR 创建一个新对象后,我再次尝试使用它时出现此错误文件:
java.lang.UnsatisfiedLinkError:
Native Library C:\deka\proj\java\ESPDF\dist\lib\jhdf5.dll
already loaded in another classloader
而且如果不关闭 MATLAB 并重新打开我无法解决它,这是一个令人头疼的问题。
这是什么错误,是谁的错? (我的?MATLAB 的?JHDF5 不释放 DLL 或检查它是否已加载)
最佳答案
一般来说,Java代码是没有办法卸载原生dll的。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5075039
鉴于此,一旦加载了一个 dll,它就会在 JVM 的生命周期内一直存在,并且 VM 将确保它只加载一次。
为了回答责备问题,我想这是尝试加载 dll 而不检查其是否已经可用的代码的错误。
关于java.lang.UnsatisfiedLinkError : Native Library {____. dll} 已经加载到另一个类加载器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223518/