0

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

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

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

感谢您的时间

4

2 回答 2

3

您应该heavyLoadMethod在单独的线程中调用。你可以使用java.util.concurrent.Executor它:

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

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

于 2010-09-06T16:15:47.603 回答
1

您正在阻止 EDT 重新绘制 GUI。

阅读 Swing 教程中有关 Swing 中的并发性的部分,以获得对该问题的完整解释。

此外,请阅读“如何使用进度条”部分以获取工作示例。

于 2010-09-06T16:06:29.683 回答