Java jssc writebytes在linux上运行一段时间后停止工作
我正在用Java编程,以便与连接到com端口的设备(通过USB连接到PC,但通过RS232到USB电缆连接)。我已经编写了一个程序,可以与jssc对话,并且在Windows下可以正常运行,即使在没有任何事情发生的情况下,它也可以继续工作更长的时间,就像它应该做的那样。在Linux下,程序在2或3分钟后停止响应,我想知道为什么 run语句如下所示Java jssc writebytes在linux上运行一段时间后停止工作,java,linux,serial-port,Java,Linux,Serial Port,我正在用Java编程,以便与连接到com端口的设备(通过USB连接到PC,但通过RS232到USB电缆连接)。我已经编写了一个程序,可以与jssc对话,并且在Windows下可以正常运行,即使在没有任何事情发生的情况下,它也可以继续工作更长的时间,就像它应该做的那样。在Linux下,程序在2或3分钟后停止响应,我想知道为什么 run语句如下所示 public void run() { while (stayConnected) { try { se
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函数永远不会返回,也不会引发异常
有人能猜出失败的原因吗?这不是固定连接的布尔值,因为我从来没有调用过这个函数,所以它设置为false
编辑:我刚刚添加了一个计数器,当我运行两次时,程序进入循环283次和285次,非常接近,两次都在2分钟左右…在Windows 7下,我遇到了一个非常类似的问题。我已经将我的软件部署到客户端PC上,大约5到6小时后,串行端口可以打开,但无法写入 根据示例,我的代码类似: 字符串读取端口(字符串命令,int byteToRead){ 不返回的代码行是
serialPort.writeString(命令);在Windows 7下,我遇到了一个非常类似的问题。我已将软件部署到客户端PC上,大约5到6小时后,串行端口可以打开,但无法写入 根据示例,我的代码类似: 字符串读取端口(字符串命令,int byteToRead){ 不返回的代码行是
serialPort.writeString(命令);我遇到了完全相同的问题,原因是另一个线程在主线程仍在读取时关闭了端口,我看到您的代码片段是关于可运行的,因此请仔细检查多线程管理。我遇到了完全相同的问题,原因是另一个线程在主线程仍在读取时关闭了端口,我看到了您的代码片段是关于一个可运行的所以仔细检查你的多线程管理
String Input = null;
if (opened == true) {
try {
serialPort.writeString(command);
Input = serialPort.readString(byteToRead);
} catch (SerialPortException ex) {
System.out.println(ex);
}
}
return Input;
}