2

我有一个使用 javax.comm 从 com 端口读取数据的应用程序。

我遇到的问题是,如果我正在读取的设备意外断开连接,我会在控制台中收到一条错误消息,显示“WaitCommEvent:错误 5”

我环顾四周,找不到任何有用的信息。我已将所有 notifyOn* 方法设置为 true,所以我认为我应该接收所有事件,但我没有捕捉到这个事件。

打印出来的错误消息不是来自我的代码中的任何地方,因此它必须在 javax.comm 包中的某个地方。谁能告诉我如何处理此错误,以便在发生此错误时可以正确关闭 com 端口?

谢谢!

4

3 回答 3

2

如果有人对此感兴趣,我找到了解决方案。我使用的是 javax.comm api,但为了解决这个问题,我用 rxtx api ( http://rxtx.qbang.org/wiki/index.php/Main_Page ) 替换了它。无需更改代码,但现在当设备断开连接时,我收到一个 IOException 消息“基础输入流返回零字节”。我处理该消息并启动一个新线程。在新线程中,我调用 port.close() 和 port.removeEventListener()。这两个调用必须在新线程中完成,否则应用程序将挂起。

于 2009-04-23T14:15:51.180 回答
2

我们花了很多时间让 javax.comm 工作,并发现在我们的例子中是 COM 驱动程序导致了问题(在几台 Windows 7 计算机上)。如果驱动程序也是您的问题,并且您使用的是 Windows 7 或可能是 Vista(并且您使用的是 Prolific/Logilink 串行电缆),那么这可能是解决方案 :) http://www.akosta.dk/category/技术说明/

希望你让它工作!

于 2010-12-08T16:31:19.997 回答
2

这个问题已经有将近 2 年的历史了,但也许另一个问题需要一个可能的解决方案:

我对 java.comm 有同样的问题:“WaitCommEvent: Error 5” 如果 COM 端口已断开连接,但 SerialPort 对象未关闭,此消息会出现多次。

我的解决方案是如果 SerialPort 的 IO 流的读/写引发异常,则关闭 SerialPort 对象。

于 2011-03-05T15:44:52.430 回答