Быстрый вывод данных в 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д