java jprogressbar在繁重的操作期间挂起

时间:2010-09-06 15:54:56

标签: java multithreading progress-bar jprogressbar

我正在编写一个java程序,在我调用一个大量使用CPU的方法之前,我在其上显示一个带有JProgressBar的框架。虽然我在调用方法之前显示它,但是在方法结束之前不会显示JProgressBar。进度条不会以任何方式与方法交互(还),这就是我感到困惑的原因。它类似于:

progressbarframe.setVisible(true); // it is a indeterminate progress bar
heavyLoadMethod();
progressbarframe.dispose();

框架显示,但进度条在方法期间未初始化。有没有办法可以在不使用线程的情况下解决这个问题?什么是最简单的方法?

感谢您的时间

2 个答案:

答案 0 :(得分:3)

您应该在单独的帖子中调用heavyLoadMethod。您可以使用java.util.concurrent.Executor

Executor executor = java.util.concurrent.Executors.newSingleThreadExecutor();
executor.submit(new Runnable() { public void run() { heavyLoadMethod();}});

现在该方法将在一个单独的线程中调用,进度条将正确显示。

答案 1 :(得分:1)

您阻止EDT重新绘制GUI。

阅读Concurrency in Swing上Swing教程中的部分,以获得问题的完整说明。

另外,请阅读“如何使用进度条”部分作为工作示例。