Быстрый вывод данных в TextArea (FXML) - Java
Формулировка задачи:
Добрый вечер!
Прошу о помощи знатоков Java (в частности JavaFX, FXML).
Пишу программу что-то наподобие монитора последовательных COM портов. Использую библиотеку jSSC.
Часть кода взята из интернета и она является стандартным шаблоном для работы с COM портами (jSSC).
Вот эта часть:
В COM порт приходят сообщения от девайса каждые 50-100 миллисекунд. (В рабочем варианте такой частоты не будет скорее всего, но хочется чтобы все работало корректно)
А проблема вся состоит в выоде этих данных в TextArea (@FXML TextArea txtBytes; ).
При попытке вывести текст строкой:
Выводится все почти корректно (иногда пропускает символы), но около 100-120 строк и потом происходит java.lang.NullPointerException.
Если вывести с помощью следующего кода:
ошибки не выдает, но корректно работает только в начале, а потом начинает нещадно пропускать символы и глючить!
А если выводить в консоль (что мне не нужно, задача вывести в TextArea):
Все выводится идеально и без ошибок!
Помогите советом, как выкрутится!?
private class PortReader implements SerialPortEventListener {
String data = "";
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() > 2){
try {
data = serialPort.readString(event.getEventValue());
if ((data != "") && (data != null)) {
//Platform.runLater(new Runnable() {
// @Override public void run() {
// txtBytes.appendText(data);
// }
// });
//txtBytes.appendText(data);
//System.out.print(data);
}
} catch (SerialPortException ex) { System.out.println(ex); }
}
}
}txtBytes.appendText(data);
Platform.runLater(new Runnable() {
@Override public void run() {
txtBytes.appendText(data);
}
});System.out.print(data);
Решение задачи: «Быстрый вывод данных в TextArea (FXML)»
textual
Листинг программы
[JAVA]class MySerialPortEventListener implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent serialPortEvent) {
if(serialPortEvent.isRXCHAR()){
try {
int byteCount = serialPortEvent.getEventValue();
byte bufferIn[] = serialPort.readBytes(byteCount);
// System.out.println(byteCount); //кол-во байт в пакете, пока не используем
String stringIn = "";
try {
stringIn = new String(bufferIn,"UTF-8");
System.out.print(stringIn ); // консоль на НетБинс
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Baychi.class.getName()).log(Level.SEVERE, null, ex);
}
textFieldIn.appendText(stringIn);
} catch (SerialPortException ex) {
Logger.getLogger(Baychi.class.getName()).log(Level.SEVERE, null, ex);
}