我遇到了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()在后台运行。
有人可以帮我解决这个问题吗?
提前谢谢!
答案 0 :(得分:10)
有一个Java FX事件调度线程,它处理所有与GUI相关的任务。您必须更新此线程中的所有UI组件。
长期运行的任务,如Thread.sleep
,永远不应该在此线程中执行,因为Windows将挂起,GUI将冻结。
执行应用程序主线程中的所有代码,并通过调用Platform.runLater
在JavaFX线程中仅执行GUI任务。
有关此主题的参考资料: