经过几天处理崩溃和大量调试后,我遇到了Platform.runLater的问题 .

我有一个应用程序执行两个线程来更新我的界面的不同部分 . 其中一个线程在UI上每秒产生许多更改(每秒约25次更改),并且在一些执行时间之后,Platform.runLater简单不执行任何操作......由参数传递的runnable不执行 . 最有趣的是,即使我杀了JVM,在这种行为之后,我的应用程序的新启动会立即显示此问题,恢复的唯一方法是重启机器 .

顺便说一句......我正在工作的是Raspberry-Pi和Oracle JDK 8

我阅读了文档:

注意:应用程序应避免使用过多的待处理Runnables充斥JavaFX . 否则,应用程序可能会无响应 . 鼓励应用程序将多个操作批量处理为更少的runLater调用 . 此外,应尽可能在后台线程上执行长时间运行操作,从而释放JavaFX应用程序线程以进行GUI操作 .

似乎我应该多次调用runLater ....但是如果我真的需要经常更新我的UI,我不会看到如何避免这样做 .

还有其他选择吗?我可以在主线程中执行此操作,从而避免调用Platform.runLater吗?我尝试过,但如果我“阻止”start方法中的代码,javaFX应用程序永远不会绘制任何东西,因为阻止应用程序阻止所有UI工作.....

任何帮助将不胜感激.....

提前致谢!

EDIT:

@James_D建议从帖子中复制:Updating UI from different threads in JavaFX

我用动画计时器重新实现了一切...现在我没有调用Platform.runLater ..之前我已经实现了这个解决方案,但我没有使用动画计时器,所以我阻止主应用程序线程做正常的业务所以它不起作用......然而......和我所期待的相反,这并没有解决我的问题...看来我正在为这个JVM做一些事情,它崩溃了......几分钟后我的程序只是挂起... java继续运行,但零日志显示......没有...我杀了它,检查进程,没有java进程,但当我重新启动应用程序时,它甚至没有显示初始消息说JavaFX应用程序启动...有谁知道什么可以导致这种行为?

即使我在世界上制作了最糟糕的代码,我的应用程序也应该崩溃,但我应该能够杀死它并再试一次 . 然而,在发生“崩溃”之后,我唯一的解决方案就是重新启动raspberry pi,重新启动后,完全相同的应用程序“正常”启动,直到几分钟后再次崩溃 . 重复整个行为..