JavaFX Plataform.runLater

JavaFX Plataform.runLater,java,javafx,Java,Javafx,在处理了几天的崩溃和大量的调试之后,我在Platform.runLater中遇到了一个问题 我有一个应用程序,它执行两个线程来更新接口的不同部分。其中一个线程每秒在UI上产生许多更改(大约每秒25次更改),并且在执行一段时间后,Platform.runLater simple不会执行任何操作…通过参数传递的runnable不会执行。最有趣的是,即使我杀死了JVM,在这种行为之后,JVM的新启动和我的应用程序立即显示了这个问题,唯一的恢复方法就是重新启动机器 顺便说一下,我现在工作的是一个树莓Pi

在处理了几天的崩溃和大量的调试之后,我在Platform.runLater中遇到了一个问题

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

顺便说一下,我现在工作的是一个树莓Pi和Oracle JDK 8

我阅读了文件:

注意:应用程序应该避免在JavaFX中使用太多的挂起数据 跑步者。否则,应用程序可能会失去响应。 鼓励应用程序将多个操作批处理到更少的内存中 稍后再打电话。此外,还应执行长时间运行的操作 尽可能在后台线程上释放JavaFX GUI操作的应用程序线程

看起来我应该多次调用runLater…但是如果我真的需要频繁更新UI,我不知道如何避免这样做

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

我们将非常感谢您的帮助

提前谢谢

编辑:

@James_D建议从线程复制:

我用动画定时器重新实现了一切。。。现在我没有对Platform.runLater.的调用。。我以前实现过这个解决方案,但我没有使用动画计时器,所以我阻止主应用程序线程执行正常的业务,所以它无法工作。。。然而。。。。与我预期的相反,这并没有解决我的问题。。。看起来我正在使这个JVM崩溃…几分钟后,我的程序挂起…java继续运行,但零日志显示…什么都没有。。。我杀死它,检查进程,并且没有java进程,但是当我重新启动应用程序时,它甚至没有显示初始消息说JavaFX应用程序启动了。。。有人知道是什么导致这种行为吗


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

您读过相关内容吗?此外,您还可以访问并检查Platform.runLater和Task之间的差异。与我认为的相反,这似乎不是代码的问题,因此我打开了一个不同的线程,在这里我解释了整个问题和所有调试:谢谢大家的帮助!