Javafx Platform.runLater 永远不会运行
Posted
技术标签:
【中文标题】Javafx Platform.runLater 永远不会运行【英文标题】:Javafx Platform.runLater never running 【发布时间】:2015-05-31 21:47:57 【问题描述】:我基本上希望能够在我的 LWJGL/GLFW 线程启动之后(和内部)启动一个新的 Javafx 窗口(阶段)。我基本上是在做:
Thread thread = new Thread(()->Platform.runLater(()->
Stage stage = new Stage();
//Stage setup
stage.show();
));
thread.start();
线程是我的游戏线程。
但它永远不会运行,我在Platform.runLater()
中尝试了一个System.out.println()
,只是为了检查它永远不会运行。
为什么它永远不会运行,我该怎么做才能修复它?谢谢。
编辑:只是为了澄清线程肯定已经开始等等,如果我这样做:
Thread thread = new Thread(()->
System.out.println("Before Platform.runLater()");
Platform.runLater(()->System.out.println("Inside Platform.runLater()"));
System.out.println("After Platform.runLater()");
);
它输出:
Before Platform.runLater()
After Platform.runLater()
【问题讨论】:
您提供的那段代码似乎没有问题。你能检查一下thread.start();
是否被调用并且线程正在启动。
使用您发布的代码,Thread
是多余的。您可以简单地从您所在的任何线程调用Platform.runLater(...)
。这里的上下文是什么? FX 工具包和应用线程启动了吗?
是的,对不起,我已经大大简化了它,因为线程中的不同类中还有很多其他的东西。我绝对知道线程已启动,因为我的 GLFW 窗口来自哪里,我可以看到这一点。基本上我有我的 GLFW 窗口/游戏,我希望在一个条件之后也出现一个阶段(所以 GLFW 窗口必须先出现)。 FX 应用程序线程已启动,因为我使用 FX 应用程序启动 GLFW 窗口。
【参考方案1】:
好的,我已经找到解决办法了!
如果您遇到所有场景都结束的情况,则管理所有这些的线程将逐渐消失。为防止这种情况发生,请在 Platform.runLater
之前添加此行:
Platform.setImplicitExit(false);
Platform.runLater(()->System.out.println("Inside Platform.runLater()"));
只要在最后一个场景结束之前运行,它就会保持线程活着,并且不会遇到runLater()失败的问题!
【讨论】:
是的!那解决了它!谢谢。 这个解决方案似乎也解决了我的问题。 此解决方案解决了在菜单栏之间导航时在 JFXpanel 中反映 webview 内容更改的问题。谢谢。以上是关于Javafx Platform.runLater 永远不会运行的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX 2:背景和 Platform.runLater 与任务/服务
JavaFX 使用 Platform.runLater 从另一个线程更新 TextArea
JavaFX UI 在事件侦听器中的 JavaFX 应用程序线程中冻结,但可与 Platform.runLater 一起使用