Приложение имеет экран «текущий прогресс», состоящий из нескольких текстовых полей и табличных представлений. Поступающие данные обрабатываются в отдельном потоке и хранятся в базе данных. Когда обработка завершена, она переключает SimpleBooleanProperty.
В потоке Java FX я присоединяю прослушиватель изменений к свойству. При изменении я вызываю процедуру обновления, которая запрашивает базу данных и обновляет текущий экран прогресса.
Иногда дисплей просто перестает обновляться. Мои журналы показывают следующее исключение:
30-08-18 09:04:15.781 ERROR java.lang.Throwable - Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
30-08-18 09:04:15.781 ERROR java.lang.Throwable - at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2289)
30-08-18 09:04:15.781 ERROR java.lang.Throwable - at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2419)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.javafx.tk.Toolkit.lambda$runPulse$29(Toolkit.java:398)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at java.security.AccessController.doPrivileged(Native Method)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:397)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:424)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$403(QuantumToolkit.java:319)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
30-08-18 09:04:15.782 ERROR java.lang.Throwable - at java.lang.Thread.run(Unknown Source)
Здесь нет индикатора того, где в моей программе что-то пошло не так. Я пытался воспроизвести проблему безуспешно.
У кого-нибудь есть мысли о том, что это может быть или как его устранить?
РЕДАКТИРОВАТЬ: «Экран progess» показывает входящие и исходящие сетевые сообщения и запрашивает базу данных для обновления нескольких полей на экране. Во всех примерах, которые я видел, фоновый поток запускается из основного потока JavaFX, но в этом случае фоновый поток (сервер) запускается до потока JavaFX. Я хочу запустить обновление потока JavaFX для сообщения, поступающего в поток сервера.