Java 断开连接时出现Rxtxcomm错误
我正在使用COM端口。 我成功地打开了COM端口并完成了所有工作。关闭COM端口时发生崩溃。 代码是Java 断开连接时出现Rxtxcomm错误,java,serial-port,fatal-error,rxtx,Java,Serial Port,Fatal Error,Rxtx,我正在使用COM端口。 我成功地打开了COM端口并完成了所有工作。关闭COM端口时发生崩溃。 代码是 public void close() throws GPSException { if (serial_port_ != null) serial_port_.close(); } 错误 我已经设法找到了一个解决方案,似乎解决了这个问题-似乎输入和输出流在串行端口关闭之前并没有完全关闭,因为它们在自己的线程中运行,并且被自己的数据缠住了。这可以通过添加同步
public void close()
throws GPSException
{
if (serial_port_ != null)
serial_port_.close();
}
错误
我已经设法找到了一个解决方案,似乎解决了这个问题-似乎输入和输出流在串行端口关闭之前并没有完全关闭,因为它们在自己的线程中运行,并且被自己的数据缠住了。这可以通过添加同步互斥来解决,同步互斥可以确保在关闭串行端口之前,这些线程已正确清理 在我的SerialConnection类中,我添加了boolean字段stopRead和stopWrite,以分别指示InputStream和OutputStream线程何时应该停止侦听。我还添加了互斥体stopReadMutex和stopWriteMutex,以便在主线程和读/写线程之间同步这些值。在循环的每次迭代中,读写器都会检查stopRead和stopWrite布尔并中断循环 调用disconnect函数时,在调用相应线程和serialPort的close函数之前,我使用互斥量更改stopRead和stopWrite值,如下所示:
public void disconnect(){
try {
synchronized(stopReadMutex)
{stopRead = true;}
synchronized(stopWriteMutex)
{stopWrite = true;}
portOut.close();
portIn.close();
serialPort.close();
} catch (IOException e) {
e.printStackTrace();
}
}
此外,如果有人想仔细查看,这里还有一个相关源代码的链接。
错误是由于线程冲突造成的。避免这种情况的最佳方法是使所有方法同步:
public synchronized void disconnect() {
serialPort.close();
}
您好,错误已解决。。多亏了allI,我也犯了同样的错误。你是怎么解决的?谢谢@迪普,你是如何解决这个错误的?迪普:你能自己发布一个问题的答案,然后接受这个答案吗?此外,如果前面的问题解决了您的问题,您需要接受这些问题的答案。
public synchronized void disconnect() {
serialPort.close();
}