该应用程序有一个“当前进度”屏幕,由多个文本框和表视图组成。传入数据在单独的线程中处理,并存储在数据库中。处理完成后,它将切换SimpleBoleAnProperty。
在JavaFX线程上,我将更改侦听器附加到属性。在更改时,我调用一个更新例程来查询数据库并更新当前进度屏幕。
有时,显示屏会停止更新。我的日志显示以下异常:
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)
在我的程序中,没有迹象表明哪里出了问题。我试图重复这个问题,但没有成功。
有人想过这可能是什么,或者如何排除故障吗?
编辑:“进展屏幕”显示传入和传出的网络消息,并查询数据库以更新屏幕上的多个字段。在我看到的所有示例中,后台线程都是从JavaFX主线程启动的,但在本例中,后台线程(服务器)是在JavaFX线程之前启动的。我想在传入服务器线程的消息上触发JavaFX线程的更新。