dll already loaded in another classloader 错误解决
遇到此问题,从网上找了下答案,记录之
?
是由于web重启时再次加载dll导致,JVM只允许一个默认的ClassLoader来load native library,并不提供专门的API来unload一个loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的dll,也没有相应的unload native 方法.
?
解决办法:
将含有JNI调用的jar包部署在Web服务器的公用lib库中。Web应用再发布时可以不用加载;
??????????? ?? (比如: 你新建一个应用时,首先将含有System.loadLibrary(*.dll)的java文件导出成jar文件,将其放入的
tomcat/lib 目录下,然后将发布后生成的含有System.loadLibrary的.class文件删除掉就可以了)