2

我正在为一个项目使用 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)。

4

2 回答 2

9

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

Platform.setImplicitExit( false );

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

于 2015-09-09T11:04:49.883 回答
-1

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

于 2013-10-06T19:27:31.297 回答