Java jSerialComm can';不刷新?

Java jSerialComm can';不刷新?,java,swing,serial-port,serial-communication,Java,Swing,Serial Port,Serial Communication,因此,目前我正在开发一个有趣的个人java库,它实现了jSerialComm。其思想是通过串行端口接收数据,将其打包,然后通过网络进行广播。互联网使用java.net库与设备进行无线通信(只要插入服务器终端),服务器很可能会将其变成RPi3 到目前为止,我的应用程序已经完成了硬接线串行通信方面的工作,但是有一个bug让我发疯。我可以完美地连接到第一台设备,但如果我选择断开连接并尝试连接到另一台设备,它只会打开通信端口,不会激活DataListener事件的新实例,因此我无法侦听新数据 priva

因此,目前我正在开发一个有趣的个人java库,它实现了jSerialComm。其思想是通过串行端口接收数据,将其打包,然后通过网络进行广播。互联网使用java.net库与设备进行无线通信(只要插入服务器终端),服务器很可能会将其变成RPi3

到目前为止,我的应用程序已经完成了硬接线串行通信方面的工作,但是有一个bug让我发疯。我可以完美地连接到第一台设备,但如果我选择断开连接并尝试连接到另一台设备,它只会打开通信端口,不会激活DataListener事件的新实例,因此我无法侦听新数据

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。