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