启动屏幕显示在事件调度线程中构建的GUI的进度

时间:2012-03-12 14:16:07

标签: java swing splash-screen event-dispatch-thread

根据http://www.javaworld.com/javaworld/jw-08-2007/jw-08-swingthreading.html?page=5,所有GUI操作都应该在Event Dispatch Thread中执行。

虽然我理解Swing设计时考虑单线程模型的原因,但我无法弄清楚如何解决以下问题:

让我们有一个名为buildGui()的方法,它初始化应用程序的主GUI。调用buildGui()方法需要10秒才能返回。

让我们使用另一个名为splashScreen()的方法,其中显示JDialog内部不确定JProgressBarJDialog的目的很明显:它为用户提供反馈,即应用程序正在加载资源,初始化组件等。

现在,如果我的程序调用:

splashScreen();   // build and show splash screen in EDT
buildGui();       // build main GUI in EDT

启动画面冻结10秒钟,因为它等待buildGui()完成。

您是否有任何想法如何在遵循Swing的单线程模型的同时显示描述GUI初始化状态的启动画面buildGui())?

2 个答案:

答案 0 :(得分:3)

将AWT用于启动画面,以便在加载Swing包之前加载它们。插件自己的SplashScreen是纯AWT。另见这个问题。 use of SplashScreen & the EDT

虽然我通常会说'这个千年,使用Swing组件',但使用AWT引起轰动很有意义。

答案 1 :(得分:1)

查看Swing tutorial about splash screens,其中包含完全符合您要求的示例代码