我最近的项目遇到了一个严重的问题:我正在一个名为 writer(...) 的方法中进行长时间比较,大约需要 20 秒。该方法在 View 类中进行标记,我的 GUI 元素也在其中设置。当方法进行比较时,我想更新进度条,但无论如何我都会这样做,当方法完成比较时它总是会更新...有什么想法吗?
这是我的代码(好吧 - 部分代码):
Thread t = new Thread(new Runnable()
{
public void run()
{
writer(List1, List2);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
bar.setValue(SOME_VALUE);
}
});
}
});
线程是通过按钮的 ActionListener 启动的
t.start();
最佳答案
它最终会更新,因为那是你更新它的地方。每次需要更新栏时,您都需要执行 bar.setValue()
(在 EDT 中,就像您已经正确执行的那样)。
也许,更简洁的方法是使用 SwingWorker 。当值更新时使用publish()
。 SwingWorkers 可以将多个更改合并为一个,并且您可以在 process()
中忽略除最后一个更改之外的所有更改(就像您在您的情况下可能想要做的那样)。
关于java - 在进行长时间比较时更新 JProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18736179/