Java jSerialComm can';不刷新?
因此,目前我正在开发一个有趣的个人java库,它实现了jSerialComm。其思想是通过串行端口接收数据,将其打包,然后通过网络进行广播。互联网使用java.net库与设备进行无线通信(只要插入服务器终端),服务器很可能会将其变成RPi3 到目前为止,我的应用程序已经完成了硬接线串行通信方面的工作,但是有一个bug让我发疯。我可以完美地连接到第一台设备,但如果我选择断开连接并尝试连接到另一台设备,它只会打开通信端口,不会激活DataListener事件的新实例,因此我无法侦听新数据Java jSerialComm can';不刷新?,java,swing,serial-port,serial-communication,Java,Swing,Serial Port,Serial Communication,因此,目前我正在开发一个有趣的个人java库,它实现了jSerialComm。其思想是通过串行端口接收数据,将其打包,然后通过网络进行广播。互联网使用java.net库与设备进行无线通信(只要插入服务器终端),服务器很可能会将其变成RPi3 到目前为止,我的应用程序已经完成了硬接线串行通信方面的工作,但是有一个bug让我发疯。我可以完美地连接到第一台设备,但如果我选择断开连接并尝试连接到另一台设备,它只会打开通信端口,不会激活DataListener事件的新实例,因此我无法侦听新数据 priva
private void btnListenActionPerformed(java.awt.event.ActionEvent evt) {
oPort = SerialPort.getCommPort(cmbPortslist.getItemAt(cmbPortslist.getSelectedIndex()));
if(btnListen.getText() == "Listen") {
cmbPortslist.enable(false);
btnListen.setText("Break");
try {
oPort.openPort();
terminalBox.append("Opened : " + oPort.getSystemPortName() + " : " + oPort.getBaudRate() + " Baud\n");
beginEvent();
}
catch (Exception e) {
terminalBox.append(e + "\n");
}
}
else {
oPort.closePort();
terminalBox.append("Broke connection with : "+ oPort.getSystemPortName() +"\n");
cmbPortslist.enable(true);
btnListen.setText("Listen");
}
}
public void beginEvent() {
oPort.addDataListener(new SerialPortDataListener() {
@Override
public int getListeningEvents() { return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; }
@Override
public void serialEvent(SerialPortEvent event)
{
if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE)
return;
try {
newData = new byte[oPort.bytesAvailable()];
int numRead = oPort.readBytes(newData, newData.length);
for (byte b : newData) {
if((char) b == '@') {
terminalBox.append("\n");
} else {
terminalBox.append(String.valueOf((char) b));
}
}
} catch (Exception e) { }
}
});
}
我注意到的第一件事是比较字符串相等性的
=
。不要那样做。使用.equals
。我支持@ElliottFrisch所述内容。出现此问题的原因是==
检查两个对象引用是否相同,这不是您感兴趣的。另一方面,.equals
和equalsIgnoreCase
方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题。}catch(异常e){}
永远不要这样做!它把你的头埋在沙子里。将每个实例更改为}catch(异常e){e.printStackTrace();}
(除非实现了更好的日志记录)。为了更快地获得更好的帮助,请发布or。我注意到的第一件事是比较字符串相等性的=
。不要那样做。使用.equals
。我支持@ElliottFrisch所述内容。出现此问题的原因是==
检查两个对象引用是否相同,这不是您感兴趣的。另一方面,.equals
和equalsIgnoreCase
方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题。}catch(异常e){}
永远不要这样做!它把你的头埋在沙子里。将每个实例更改为}catch(异常e){e.printStackTrace();}
(除非实现了更好的日志记录)。为了更快地获得更好的帮助,请发布一个or。