在事件调度线程中显示JWindow

时间:2010-10-08 09:11:31

标签: java multithreading swing concurrency event-dispatch-thread

我想要做的是在我的程序加载某些内容时出现一个小的启动画面。这就是我所拥有的:

SplashScreen.showSplashScreen();
// Do stuff that takes time.
SplashScreen.hideSplashScreen();

所有showSplashScreen()方法都会在屏幕中间创建一个新的JWindow并使其可见。

现在这个代码是从事件调度线程中调用的,所以当调用showSplashScreen()方法时,我不会看到JWindow,直到线程完成,到那时,我不需要窗口了。在我等待的时候,展示这个闪屏的最佳方式是什么?

2 个答案:

答案 0 :(得分:4)

不确定这是否是“最佳方式”,但我之前使用过的机制是在EDT以外的其他线程上进行初始化,但使用SwingUtilities.invokeAndWait显示启动画面。这样,即使你的初始化很快(至少你想要发生的事情),你至少也会看到启动画面。

所以在你的init线程上,你去:

SwingUtilities.invokeAndWait( /* Runnable to show splash screen */ );

// Do stuff that takes time.

SwingUtilities.invokeLater( /* Hide splash screen, display main GUI */ );

答案 1 :(得分:0)

在1.6中引入了java.awt.SplashScreen类,尝试使用它?