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



根据 http://www.javaworld.com/javaworld/jw-08-2007/jw-08-swingthreading.html?page=5 所有GUI操作都应在事件调度线程中执行。

虽然我理解为什么 Swing 在设计时考虑了单线程模型,但我无法弄清楚如何解决以下问题:

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

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

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

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

初始屏幕将冻结 10 秒钟,因为它等待buildGui()完成。

您有任何想法吗,如何在遵循 Swing 的单线程模型时显示描述 GUI 初始化状态的初始屏幕 (buildGui() ( ?

将 AWT 用于初始屏幕,以便可以在加载 Swing 包之前加载它们。 插件自己的SplashScreen是纯 AWT。 另请参阅此问题。使用SplashScreen和EDT。

虽然我通常说"这个千年,使用 Swing 组件",但使用 AWT 进行飞溅很有意义。

查看有关初始屏幕的 Swing 教程,其中包含完全执行所需操作的示例代码

最新更新