所以目前我一直在研究一个实现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) { }
}
});
}