【发布时间】:2011-03-02 04:47:14
【问题描述】:
首先,我最近一直在使用 Java 的 Concurrency 包,但我发现了一个问题。我想拥有和应用程序,并且应用程序可以拥有带有状态栏和加载其他数据的SplashScreen。所以我决定使用SwingUtilities.invokeAndWait( call the splash component here )。然后SplashScreen 出现JProgressBar 并运行一组线程。但我似乎无法很好地处理事情。我查看了SwingWorker 并尝试将其用于此目的,但线程刚刚返回。这是一些伪代码。以及我想要达到的目标。
- 有一个具有
SplashScreen的应用程序在加载信息时暂停 - 能够在
SplashScreen下运行多个线程 - 让
SplashScreen的进度条可以更新,但在所有线程完成之前不会退出。
启动闪屏
try {
SwingUtilities.invokeAndWait( SplashScreen );
} catch (InterruptedException e) {
} catch (InvocationTargetException e) { }
闪屏搭建
SplashScreen extends JFrame implements Runnable{
public void run() {
//run threads
//while updating status bar
}
}
我尝试了很多东西,包括SwingWorkers、使用 CountDownLatch 的线程等等。 CountDownLatch 实际上以我想要处理的方式工作,但我无法更新 GUI。使用SwingWorkers 时,invokeAndWait 基本上无效(这是他们的目的),或者即使使用PropertyChangedListener 也不会更新GUI。如果其他人有一些想法,很高兴听到它们。提前致谢。
我实际上已经准备好发布更好的代码来提供帮助并找到我的解决方案。我感谢所有帮助过的人。
【问题讨论】:
-
如果您可以创建并发布SSCCE,您的问题可能会得到更快、更正确的解决。
-
抱歉,我在发帖时正在睡觉,我所发布的代码非常丑陋,所以我希望能传达这个想法,如果下面的答案对我不起作用,我'会发布一些真实的代码。谢谢推荐。
标签: java multithreading swing concurrency swingworker