JavaFX应用程序线程如何工作?

7

我有一个关于JavaFX应用线程的问题。这是伪代码:

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

问题在于sleep发生在showMenu()显示的窗口中,而showLoadingPic()根本没有显示,最后showMap()中的窗口显示出来了。
在showLoadingPic场景中有一个进度条,运行2秒钟,这与Thread.sleep(2000)的时间相同。
因此,似乎javafx应用程序线程阻塞了showLoadingPic(),而showLoadingPic()在后台运行。
有人可以帮我解决这个问题吗?
提前感谢你!
1个回答

16

Java FX有一个事件分发线程,负责处理所有与GUI相关的任务。您必须在此线程中更新所有UI组件。

不应该在此线程中执行长时间运行的任务,例如Thread.sleep,因为窗口将会停止响应,GUI将会冻结

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

关于此主题的参考资料:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接