How JavaFX application thread works?

浪尽此生 提交于 2019-11-26 10:02:14

问题


I have a problem with Java FX application thread. Here is a pseudo-code:

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

The problem is that the sleep occurs in window which is displayed in showMenu(), showLoadingPic() is not shown at all, and at the end window in showMap() is shown.

The scene in showLoadingPic has a progress bar which runs 2 secs which is the same time as Thread.sleep(2000).

So it seems like javafx application thread blocks showLoadingPic() and showLoadingPic() runs at background.

Can somebody help me to fix this??

Thank you in advance!


回答1:


There is a Java FX event dispatch thread, which handle all GUI-related tasks. You must update all UI components in this thread. Long-running tasks, like Thread.sleep should never be executed in this thread, since windows will hang, and the GUI will be frozen.

Execute all your code in the application main thread, and perform only GUI tasks in JavaFX thread, by calling Platform.runLater.

References on this topic:

  • Concurrency in JavaFX, from Oracle
  • Related SO question


来源:https://stackoverflow.com/questions/19755031/how-javafx-application-thread-works

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!