有问题卸载rxtxSerial.dll

时间:2013-01-07 12:39:47

标签: java dll rxtx

我正在通过Java Applet和rxtx库进行一些串行通信。 Applet工作正常,但是当加载更多时,我遇到问题

  

UnsatisfiedLinkError:rxtxSerial.dll已加载到另一个类加载器

关注How to unload library (DLL) from java JVM我正在尝试卸载dll,我相信这可以帮助解决这个问题。

根据我的理解,我可以为rxtx类定制类加载器并强制垃圾收集器在某些时候清除所有内容,包括加载的dll。

所以下面的代码应该有帮助(我试图在负责开始与串口通信的函数中加载它)。

cl = new CustomClassLoader();
ca = cl.findClass("gnu.io.CommPortIdentifier");
a = ca.newInstance();
p = ca.getMethod("getPortIdentifier");
portId = (CommPortIdentifier) p.invoke(a, comportUsed);

不幸的是它会抛出ClassNotFoundException

我猜我的自定义类加载器有问题,但不知道是什么。

请帮助我找到或克服UnsatisfiedLinkError的方法。

1 个答案:

答案 0 :(得分:0)

我不得不在运行时卸载一个有缺陷的DLL。不幸的是,没有可靠的解决方案。即使您使用自定义类加载器,某些操作系统作为Windows Vista只会在DLL卸载时终止VM。最后,我不得不用自己的驱动程序替换DLL。您可以查看我们之前的讨论

https://forums.oracle.com/forums/thread.jspa?threadID=1546756&tstart=1185

您可能需要修改设计以避免多次加载DLL。一个小的专用Java服务器/应用程序可以完成这项工作

相关问题