Java堂  


使用Jacob时出现的另一个UnsatisfiedLinkError错误:jacob.dll already loaded in another classloader

Filed under: JavaPlateform — Jet @ 12:00 上午
Tags:
原文出处: 使用Jacob时出现的另一个UnsatisfiedLinkError错误:jacob.dll already loaded in another classloader
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

之前文章中已经说过Jacob在windows2003环境下使用的时候会出现UnsatisfiedLinkError错误,解决的方法是需要下载Redistributable Package安装即可。

但如果在JavaEE项目中使用Jacob的时候还会出现另外一个UnsatisfiedLinkError错误:jacob.dll already loaded in another classloader,错误往往会出现在Web容器重启之后。后来查到下面的相关资料:

Java API表明:JVM只允许一个默认的ClassLoader来load native library,同时并不提供专门的API来unload一个loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的jacob。

原因找到了,这是因为在重启Web容器的时候并不会自动结束上一次对dll的加载,解决问题的关键在于重启Web程序之后要确保不要再次加载jacob.jar包,有一个方法就是不要将jacob.jar包放在web程序中,而是将jacob.jar包放在Web容积自身的lib目录下面就可以了。

参考资料:
jacob.dll already loaded in another classloader

Jacob出现UnsatisfiedLinkError错误的解决方法

Filed under: JavaPlateform — Jet @ 5:13 上午
Tags:
原文出处: Jacob出现UnsatisfiedLinkError错误的解决方法
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

Jacob是一个非常常用的用于在Java中连接COM组件的包,它底层使用JNI进行实现,简化了直接使用JNI调用COM组件的繁琐过程。

但是最新的Jacob在Windows 2003系统下使用的时候总是出现UnsatisfiedLinkError的提示,而在XP系统下使用正常。后来在Jacob官方论坛上面查到了解决方法,原来Jacob从1.13之后使用的开发工具是VC++ 2005,如果在旧的系统下运行程序出现UnsatisfiedLinkError错误的时候是因为系统中没有安装Redistributable Package,只要到微软的官方网站上下载这个文件安装之后就可以正常使用了。

参考资料:
can’t run jacob in win server 2003