我有一个使用javax.comm从com端口读取数据的应用程序。
我遇到的问题是,如果我正在读取的设备意外断开连接,我在控制台中出现“WaitCommEvent:Error 5”错误
我环顾四周,找不到任何有用的信息。我已将所有的notifyOn *方法设置为true,因此我认为我应该接收所有事件,但我没有抓住这个。
打印出来的错误消息并非来自我的代码中的任何位置,因此它必须位于某个地方的javax.comm包中。任何人都可以告诉我如何处理这个错误,以便我可以正常关闭COM端口吗?
谢谢!
答案 0 :(得分:2)
如果有人对此感兴趣,我找到了解决方案。我正在使用javax.comm api,但为了解决问题,我用rxtx api(http://rxtx.qbang.org/wiki/index.php/Main_Page)替换了它。不需要更改代码,但现在当设备断开连接时,我收到一条IOException,消息“底层输入流返回零字节”。我处理了这条消息并启动了一个新线程。在新线程中,我调用port.close()和port.removeEventListener()。这两个调用必须在新线程中完成,否则应用程序将挂起。
答案 1 :(得分:2)
我们已经花了很多时间让javax.comm工作,并发现在我们的例子中是导致问题的COM驱动程序(在几台Windows 7计算机上)。 如果驱动程序也是你的问题而且你正在使用Windows 7或者可能是Vista(并且你使用的是Prolific / Logilink seriel线缆)那么这可能是解决方案:) http://www.akosta.dk/category/technical-notes/
希望你能开始工作!
答案 2 :(得分:2)
这个问题将近2年,但也许另一个问题需要一个可能的解决方案:
我遇到了与java.comm相同的问题:“WaitCommEvent:Error 5” 如果COM端口断开连接,此消息会多次出现, 但是SerialPort对象没有关闭。
我的解决方案是在读取/写入SerialPort的IO流时抛出异常,关闭SerialPort对象。