2011-03-19 48 views
2

我似乎无法理解为什么当使用某些值时,JProgressBar会冻结并停止计算。例如,下面的代码在所有的时间里只显示零;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

因此,您希望进度条只更新i值的每100次更改吗? – MeBigFatGuy 2011-03-19 06:04:58

回答

1

如果你知道进展的范围是什么(可能是0 - 2500),你可以通过progressBar.setMaximum(2500)告诉JProgressBar。这种方式你不需要一个barValue变量,只需让进度条知道你的真实进度。