我似乎无法理解为什么在使用某些值时JProgressBar会冻结并停止进行计算。例如,下面的代码始终只显示零;

     ...
       int value = (100/maxGenerations)*i;       //maxGenerations = 2500
       final int barValue = value;
       SwingUtilities.invokeLater(new Runnable() {
          public void run() {
          progressBar.setValue(barValue);
        }
     });

但是,如果使用相同的实现,我将执行以下操作(当然,不准确的只是垃圾计算):
     ...
       int value = (i/100);         //where 'i' increments until = 2500
       final int barValue = value;
       SwingUtilities.invokeLater(new Runnable() {
          public void run() {
          progressBar.setValue(barValue);
        }
     });

有什么想法吗?

最佳答案

如果您知道进度的范围是多少(大概是0-2500),则可以通过 progressBar.setMaximum(2500) 告诉JProgressBar。这样,您就不需要barValue变量,只需让进度条知道您的实际进度即可。

关于java - JProgressBar更新值的行为(线程),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5360450/

10-10 10:10