根据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
内部不确定JProgressBar
。 JDialog
的目的很明显:它为用户提供反馈,即应用程序正在加载资源,初始化组件等。
现在,如果我的程序调用:
splashScreen(); // build and show splash screen in EDT
buildGui(); // build main GUI in EDT
启动画面冻结10秒钟,因为它等待buildGui()
完成。
您是否有任何想法如何在遵循Swing的单线程模型的同时显示描述GUI初始化状态的启动画面(buildGui()
)?
答案 0 :(得分:3)
将AWT用于启动画面,以便在加载Swing包之前加载它们。插件自己的SplashScreen
是纯AWT。另见这个问题。 use of SplashScreen
& the EDT。
虽然我通常会说'这个千年,使用Swing组件',但使用AWT引起轰动很有意义。
答案 1 :(得分:1)
查看Swing tutorial about splash screens,其中包含完全符合您要求的示例代码