2

我正在开发一个 Java 程序,它读取文本文件并进行一些概率计算。读取文件和所有相关计算都是在一个while循环中完成的。

我使用 JFrame 创建了一个 GUI,其中我添加了一个进度条(使用 JProgressBar)来显示进度,因为程序需要一段时间来处理文件。

代码看起来像 -

while( there are more files to read )
{
    Read this file ;
    Do calculations ;

    Update progress bar ;
}

现在,问题是一旦 while 循环开始并处理了第一个文件,JFrame 就会冻结。进度条没有更新,我无法按下 JFrame 中的任何按钮。一旦 while 循环结束,帧就会更新,进度条会更新为其最终值(因此,进度条从 0 开始,然后暂停,最后到 100)

有人可以解释为什么 JFrame 冻结了吗?是否可以在 while 循环迭代中更新它(JFrame 中的进度条)?

谢谢 !

4

3 回答 3

3

您正在事件调度线程 (EDT) 中执行时间密集型任务。这是一个坏主意,因为 EDT 也会更新 UI。因此,如果此线程被阻止,则不会更新 UI。

于 2013-04-03T13:22:18.250 回答
2

解决方案是使用threads,这就是原因,因为您正在冻结,您正在同时做所有事情。

敬请期待:

于 2013-04-03T13:26:08.533 回答
1

一个线程一次只能做一件事。因此,如果您让它进行计算,它将不会更新 gui。所以你应该使用另一个线程。此外,您可能需要重新绘制您的 gui。

于 2013-04-03T13:22:57.347 回答