Java串行I/O:如何以健壮的方式处理USB串行连接/断开连接

3

我在Java中使用rxtx和FTDI2232H一起处理串行I/O,后者提供了一个USB通信端口。它的表现很好,但有一个例外:如果我在运行时拔掉USB电缆,使COM端口消失,那么它会不断地抛出异常:

java.io.IOException: No error in nativeavailable
at gnu.io.RXTXPort.nativeavailable(Native Method)
at gnu.io.RXTXPort$SerialInputStream.read(RXTXPort.java:1427)
at gnu.io.RXTXPort$SerialInputStream.read(RXTXPort.java:1339)

当我重新插入电缆时,它并没有恢复。

有没有办法让rxtx与USB通信端口的连接/断开连接正常工作?(我尝试过发布到rxtx邮件列表,但出现了一些奇怪的问题,即使我已经订阅了该列表,也无法发送消息。我已经给列表管理员发送了电子邮件,但没有得到回复。)

如果没有,是否有另一个串行I/O框架可以实现?


自从遇到这个问题后,我转而使用PureJavaComm,已经使用了几年,没有任何问题。我已经放弃使用RXTX;它已经不再得到良好的维护。NRJavaSerial是RXTX的一个维护分支--虽然我在过去几年中没有尝试过。 - Jason S
2个回答

0

好的。我们使用WM_DEVICECHANGE并用C++编写了DLL,然后通过JNI从Java应用程序中访问它。因此,我们可以得到连接和断开连接的通知。


0
听起来,我不确定在Java中是否可以实现,但有一个Windows消息被广播 - WM_DEVICECHANGE 消息,你可能需要拦截这个消息并且如果是设备弹出,则优雅地关闭rxtx代码。这里是一个检查CDROM驱动器中插入/移除CD的示例代码(它不是Java)。 编辑:我添加了另一个链接这里,也许对你有帮助。
希望这些能帮到你, 最好的问候, 汤姆。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接