java - 卸载 rxtxSerial.dll 时出现问题

标签 java dll rxtx

我正在通过 Java Applet 和 rxtx 库进行一些串行通信。 小程序工作正常,但是当加载次数超过一次时,我遇到了问题

UnsatisfiedLinkError: rxtxSerial.dll already loaded in another classloader

已关注 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的方法。

最佳答案

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

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

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

关于java - 卸载 rxtxSerial.dll 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14196167/

相关文章:

java - Gradle/Maven 部署到 github 包 - 保留参数/参数名称

java - 防止 RXTX 打印版本信息

java - SerialPortEventListener 实现

java - Mac 上的 RXTX Java Eclipse

java - 查找字符集的所有组合

java - 透明JButton占用了其他的背景,如何解决?

java - 初始化模拟对象 - Mockito

c# - 如何从PowerBuilder中的外部函数异步获取返回值的值?

C++ DLL 链接器错误

c - Win32 DLL/引用存储