Java 断开连接时出现Rxtxcomm错误

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(); } 错误 我已经设法找到了一个解决方案,似乎解决了这个问题-似乎输入和输出流在串行端口关闭之前并没有完全关闭,因为它们在自己的线程中运行,并且被自己的数据缠住了。这可以通过添加同步

我正在使用COM端口。 我成功地打开了COM端口并完成了所有工作。关闭COM端口时发生崩溃。 代码是

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();
}