我正在用 Java 编程以与连接到 COM 端口的设备通信(通过 USB 连接到 PC,但通过 RS232 到 USB 电缆之间)。我编写了一个与 jssc 对话的程序,并且在 Windows 下运行正常,即使什么也没发生,它也能工作更长时间,就像它应该的那样。在 Linux 下,程序在 2 或 3 分钟后停止响应,我想知道为什么。
运行语句如下
public void run() {
while (stayConnected) {
try {
serialPort.writeBytes(pollBuf);
readResponse(false);
Thread.sleep(400);
serialPort.writeBytes(readEvents);
readResponse(true);
} catch (InterruptedException ie) {
logger.error("Interrupted exception: " + ie.getMessage());
} catch (SerialPortException spe) {
logger.error("SerialPortException: " + spe.getMessage());
}
}
}
要知道程序挂在哪里,我添加了日志,我发现最后一个正常运行的命令是最后一次调用 readResponse(true),第一个停止返回的是 serialPort.writeBytes(pollBuf)。希望它能解决问题,我将 400 毫秒的睡眠分成两部分,并将另一个睡眠放在 serialPort.writeBytes(pollBuf) 之前。那没有帮助。不知何故,serialPort.writeBytes 函数永远不会返回,也不会抛出异常。
有没有人猜测失败可能是什么?这不是 stayConnected 布尔值,因为我从未调用过该函数,因此将其设置为错误;
编辑:我刚刚添加了一个计数器,当我运行它两次时,程序进入循环 283 和 285 次,这非常接近,大约 2 分钟......