【问题标题】:JavaFX - runLater Runnable not calledJavaFX - 未调用 runLater Runnable
【发布时间】:2013-10-13 07:15:10
【问题描述】:

我正在为一个项目使用 JavaFX。 在启动期间,我有一个询问数据的提示,并且我的网络类使用这些数据建立与服务器的连接。 我的网络类正在异步工作,我在回调中得到响应。根据响应,我想从我的回调中打开一个新窗口(阶段)。

执行我的 mainStage.setScene() 会按预期触发异常 - 不是从 JavaFX 应用程序线程调用的,我必须使用 Platform.runLater() 但是:

Platform.runLater(new Runnable() {          
    @Override
    public void run() {
        System.out.println("run");
    }
});

它从不打印"run"。为什么? accountDataPrompt.login() 函数位于我的 JavaFX 启动函数的末尾,正如我所说,网络连接异步运行。 提示是一个自定义 JavaFX 对话框 (JavaFX UI Sandbox)。

【问题讨论】:

    标签: java javafx runnable


    【解决方案1】:

    所有场景完成后,JavaFX 应用程序线程将停止。所以你的下一个 Platform.runLater() 将不起作用。

    Platform.setImplicitExit( false );
    

    使用上面的代码。这将解决问题。

    【讨论】:

    • 没有包含这一行让我的整个 GUI 冻结。这解决了问题!谢谢!
    • 对于编写需要 RunLater 并且没有任何 GUI 的 JUNIT 测试非常有用。例如,测试一个 JAVAFX 服务。
    • 非常感谢!这是一个很大的帮助。再次感谢您
    【解决方案2】:

    好吧,我通过在调用之后使用 object.wait() 并在执行 runLater 之前在回调中使用 object.notify() 来解决它。我猜它与 JavaFX 应用程序线程有关,并且它会在启动函数完成后以某种方式结束,而不会显示任何活动场景或类似的东西。 肯定有更好的解决方案,但至少它是一种解决方法..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多