jSerialComm无法刷新?

时间:2017-05-29 22:35:50

标签: java swing serial-port serial-communication

所以目前我一直在研究一个实现jSerialComm的有趣的个人java库。这个想法是通过串行端口接收数据,将其打包并通过它进行广播。互联网使用java.net库与设备进行无线通信(只要它插入服务器终端)服务器最有可能变成RPi3。

到目前为止,我的应用程序已完成,就硬连线串行通信方面而言,但有一个错误让我疯狂。我可以完美地连接到第一个设备,但如果我选择断开连接并尝试连接到另一个设备,它只会打开Comm端口并且不会激活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) { }
        }
    });
}

0 个答案:

没有答案