ここにコードスニペットがあります
ここで私はアクションリスナーを開始しています
try {
port_seleted.addEventListener(this);
} catch (TooManyListenersException e) {
System.out.println("too many Listeners!");
}
port_seleted.notifyOnDataAvailable(true);
ここでは、データを受信すると以下のメソッドが呼び出されます
public void serialEvent(SerialPortEvent Ack_Rec) {
boolean first_flash = false;
if (Ack_Rec.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
while (input_data.available() > 0) {
input_data.read(rec_ack);
}
} catch (IOException e) {
System.out.println("IO Exception in SerialEvent");
}
データを正しく受信していません。
「Hello How are you doing today」というデータを送信すると、「Hello h」「ow」「are you」「doin」「g today」として受信されます。
つまり、Serial イベント メソッドが複数回呼び出されています。つまり、完全なデータが読み取られる前に while ループを終了しています。
遅延を挿入すると
try {
while (input_data.available() > 0) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
input_data.read(rec_ack);
}
} catch (IOException e) {
System.out.println("IO Exception in SerialEvent");
}
上記のとおり、問題なく動作しています。効率が低下しているため、遅延を取り除く方法を教えてください!