JFrame在while循环期间冻结

时间:2013-04-03 13:20:19

标签: java swing while-loop jframe jprogressbar

我正在研究一个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中的进度条)?

谢谢!

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

请看,

答案 2 :(得分:1)

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