7

我对 Java FX 应用程序线程有疑问。这是一个伪代码:

showMenu();
//Contoller which waits for action(pressing button)...
showLoadingPic();
Thread.sleep(2000);
showMap();

问题是在 showMenu() 中显示的窗口中发生睡眠,showLoadingPic() 根本没有显示,并且在 showMap() 中显示最后窗口。

showLoadingPic 中的场景有一个运行 2 秒的进度条,与 Thread.sleep(2000) 的时间相同。

所以看起来 javafx 应用程序线程块 showLoadingPic() 和 showLoadingPic() 在后台运行。

有人可以帮我解决这个问题吗?

先感谢您!

4

1 回答 1

16

有一个 Java FX 事件调度线程,它处理所有与 GUI 相关的任务。您必须更新此线程中的所有 UI 组件。长时间运行的任务,比如Thread.sleep永远不应该在这个线程中执行,因为窗口会挂起,GUI 会被冻结

在应用程序主线程中执行所有代码,并在 JavaFX 线程中仅执行 GUI 任务,方法是调用Platform.runLater.

关于此主题的参考资料:

于 2013-11-03T16:22:52.720 回答