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文件删除掉就可以了)

你可能感兴趣的:(jvm,tomcat,Web,应用服务器,jni)