我正在開發一個應用程序,使用java-simple-serial-connector API讀取 並寫入串行端口。當我嘗試讀取數據字節 並將它們分配給全局字符串變量(sReader)時,我遇到了問題。 sReader不會獲得整個字符串,並且其長度每次都是隨機的。我相信我收到所有的字節,因爲當我將字符串sBuffer附加到Output(Output.append)時,總是顯示整個字符串。請看看我的示例代碼如下:java - 無法在invokeAndWait中賦值給全局字符串變量
public class SerialPortTest extends javax.swing.JFrame {
private String sReader = "";
private JTextArea outputTextArea;
private JLabel outputLabel;
private class Reader implements SerialPortEventListener {
private String sBuffer = "";
@Override
public void serialEvent(SerialPortEvent spe) {
if (spe.isRXCHAR() || spe.isRXFLAG()) {
if (spe.getEventValue() > 0) {
try {
//Read chars from buffer
byte[] bBuffer = serialPort.readBytes(spe.getEventValue());
sBuffer = new String(bBuffer);
SwingUtilities.invokeAndWait(
new Runnable() {
@Override
public void run() {
sReader = sBuffer;//does not assign full string
outputLabel.setText(sBuffer);//does not set full string
outputTextArea.setText(sBuffer);//does not set full string
outputTextArea.append(sBuffer);//This works! Why the above don't work?
}
});
} catch (SerialPortException | InterruptedException | InvocationTargetException ex) {
}
}
}
}
}
}
請注意'Output'是一個實例變量,按照慣例,應該以小寫字母開頭。 – DNA 2012-02-28 20:56:01
感謝您注意到,這是一個意外,因爲我正在快速鍵入示例 – jadrijan 2012-02-28 20:58:32