我搜索了我的问题,但我没有找到类似的东西......我有一个事件处理程序,用于从串口接收新数据。当接收到完整的数据包时,执行一个更新UI等功能(大功能)。问题是有时在结束代码之前,新数据到达并且再次处理从开始到UI并且UI不能实时更新... 我想要一个方法,让事件处理程序等待,直到执行特定的函数,然后事件处理程序触发,再次... 这是数据接收的代码,事件处理程序
StringBuilder temp = new StringBuilder();
//scanner = new Scanner(Selected.getInputStream());
Selected.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;
byte[] newData = new byte[Selected.bytesAvailable()];
int numRead = Selected.readBytes(newData, newData.length);
for(int i =0 ; i<newData.length;i++){
temp.append((char) newData[i]);
if((char) newData[i] == '\n'){
logText.appendText(temp.toString());
if(tele.checkSumCheck(temp.toString())){
if(exportCSV){
writeToCSV(temp.toString());
}
System.out.println(temp.toString());
tele.initString(temp.toString());
tele.parseString();
updateUI();
}
temp.setLength(0);
}
我认为它可以通过多线程来解决......问题是当新数据到达时遥测数据包发生变化所以我不知道在这种情况下不同线程会发生什么......在这种情况下我们仍然正在显示的最后一个遥测数据,并使用刚刚到达的新数据更新UI。