我正在使用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)。
答案 0 :(得分:7)
完成所有场景后,JavaFX应用程序线程将停止。所以你的下一个Platform.runLater()将不起作用。
Platform.setImplicitExit( false );
使用上面的代码。这将解决问题。
答案 1 :(得分:-1)
好吧,我在调用之后使用object.wait()并在执行runLater之前在回调中使用object.notify()来解决它。我想它与JavaFX应用程序线程有关,并且只要启动函数完成就会以某种方式结束而不显示任何活动场景或类似的东西。 确实有一个更好的解决方案,但至少它是一种解决方法..