我遇到了RXTX库的问题。我试图在我的项目中添加对一次读/写多个串口的支持,并开始在运行时收到以下消息。
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000001800071cd, pid=9032, tid=5016
#
# JRE version: Java(TM) SE Runtime Environment (7.0_51-b13) (build 1.7.0_51-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [rxtxSerial.dll+0x71cd]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\Jack\workspace\TestProject\hs_err_pid9032.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
我已经能够隔离产生此崩溃的代码,并且希望有人可以提供关于它为什么会发生的解释,和/或可能验证这确实是rxtx的预期行为(而不是结果)我的设置有些错误配置.RXTX确实抱怨我的native-lib和jar之间每次都不匹配.subine-lib 2.2pre2和jar版本2.1-7,但我忽略了到目前为止没有明显的不良影响)
产生错误的最简单代码:
public static void main(String[] args) throws Exception {
CommPortIdentifier com13PI = CommPortIdentifier
.getPortIdentifier("COM13");
CommPortIdentifier com1PI = CommPortIdentifier
.getPortIdentifier("COM1");
SerialPort com13 = (SerialPort) com13PI.open(main.class.getName(), 400);
SerialPort com1 = (SerialPort) com1PI.open(main.class.getName(), 400);
com13.close();
//com1.close();
com13PI = CommPortIdentifier.getPortIdentifier("COM13");
com13 = (SerialPort) com13PI.open(main.class.getName(), 400);
}
关键的一行是'com1.close()',目前已被注释掉。取消注释时,此代码可以正常工作。在它的当前形式中,它产生上述异常。
RXTX的文档非常缺乏,我无法判断这是否是预期的行为。但是,打开和关闭一个串口的能力,而另一个仍然打开的能力似乎是在使用RXTX库时会经常出现的,所以如果这是rxtx中一个未修复的错误,这似乎有点令人震惊。如果安装了rxtx的人可以测试此代码并报告结果或提供解释,我会很感激。
答案 0 :(得分:0)
我没有配备我的串口调制解调器,但我记得有类似的问题。
首先,检查com1.close()周围是否存在异常。如果你得到一个IOException,那是因为流仍然有内容而且它被卡住了。如果该流上有消费者但未处理任何内容,则会发生这种情况。在Linux find . | yourscript
中考虑管道,其中yourscript不会消耗find .
生成的内容。
你 应该能够打开和关闭端口,但IMHO RxTx真的变幻无常,当事情不会发生太大变化时,它可以正常工作。