java - 任务开始后更新进度条最大值

标签 java swing swingworker

我正在寻找一种更新进度条最大值的方法。如果这是完成此任务的正确方法,我想使用确定进度栏。我在下面设置了

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/

相关文章:

java - 我使用 eclipse 调试器是否错误?

java - AWTUtilities setWindowOpaque 导致问题

java - 在带有动态文本的 Jlabel(标签)框中设置背景图像

java - TomEE : How to configure multiple datasources?

java - 使用哈希数组和 Java 8 流对字符串进行排序

java - 在 Docker Swarm 中运行集群时暴露 Nifi UI

java.lang.NoClassDefFoundError : Could not initialize class javax. swing.UIManager

java - 获取 SwingWorker doInBackground() 上变量的值

Java SwingWorker 锁定 GUI

java - 尝试从 SwingWorker done() 方法绘制 JPanel 什么都不做