我正在寻找一种更新进度条最大值的方法。如果这是完成此任务的正确方法,我想使用确定进度栏。我在下面设置了
final JDialog dialog = new JDialog(frame, "Progress Dialog", true);
progressBar = new JProgressBar(0, 500);
progressBar.setIndeterminate(false);
dialog.add(BorderLayout.CENTER, progressBar);
dialog.add(BorderLayout.NORTH, new JLabel("Progress..."));
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); dialog.setSize(300, 75);
dialog.setLocationRelativeTo(frame);
此时我不知道进度条的最大值是多少。在下面的 block 中,runner 是 SwingWorker 的子类。直到该过程开始后,我才知道进度条的最大值是多少。
// run the report in its own thread
try {
runner = ReportFactory.create(reportName, startDate, endDate);
runner.addPropertyChangeListener(progressListener);
runner.execute();
} catch (Exception e1) {
logger.error(e);
System.exit(1);
}
我稍后尝试过使用和不使用调用。
private class ProgressListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (runner.getProgress() == 0) {
// SwingUtilities.invokeLater(new Runnable() {
// public void run() {
progressBar.setMaximum(runner.getMaximumProgressSize());
// }
// });
}
progressBar.setValue(runner.getProgress());
}
}
对我来说,invokeLater 将不起作用,因为任务尚未完成。我花了一天的大部分时间试图让这个进度条发挥作用。任何帮助或方向的改变将不胜感激!
最佳答案
上面的评论效果很好!
关于java - 任务开始后更新进度条最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56030908/