我正在开发一个带有http通信,套接字等的大型java fx应用程序。消息的内容更新了GUI元素。我知道每当我想从普通线程更新javafx元素时我都需要调用Platform.runlater()
。我99%肯定,到处都有。但是应用程序非常庞大,并非一切都由我自己完成。
为了提供更多信息,每100ms有一个TimerTask,它从字节数组创建一个Image。 imageView.setImage(image)
的呼叫在Platform.runlater()
中完成。
但是,我收到以下错误(使用java 1.8.0.0_102):
2017-01-20T05:03:47,030 FATAL [JavaFX Application Thread] uncaughtException - Thread[JavaFX Application Thread,5,main]
java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Unknown Source) ~[jfxrt.jar:?]
at javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source) ~[jfxrt.jar:?]
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Unknown Source) ~[jfxrt.jar:?]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_77]
at com.sun.javafx.tk.Toolkit.runPulse(Unknown Source) ~[jfxrt.jar:?]
at com.sun.javafx.tk.Toolkit.firePulse(Unknown Source) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(Unknown Source) ~[jfxrt.jar:?]
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) ~[jfxrt.jar:?]
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:?]
at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source) ~[jfxrt.jar:?]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_77]
有关如何查找此错误来源的任何建议?正如我上面提到的,我检查了所有线程,在fx线程上没有调用任何与fx相关的线程。我不确定,您是否允许在非fx线程上加载图像(Java FX图像)?我在一个小样本应用程序中对它进行了测试,它没有给出任何错误。
修改 我发现了这个问题:same error,但是我试图强行更新场景。
感谢您的任何想法!