代码:
 public void actionPerformed(ActionEvent e){
 Thread temp = new BcMasProcessThread(this.jpBar,this,BcMasReaderUrl.getFileCount(tfFile.getText()));
 bcThread.start();  while(strTemp != null){
    循环操作。。
     if(){}   ///往数据库插入数据如果加上这样的业务操作进度条就不能把中间的显示   了,看到的只是显示为100%的了,不知道为什么,是不是界面刷新问题??请各位指点~~~  
  }
  insertCountTemp++;
  this.setInsertCount(insertCountTemp);  //把变化的数据传到线程中!
}
public class BcMasProcessThread extends Thread{
        
         private int count;
private JProgressBar jBar;

BcMasImportData bcImport;
public BcMasProcessThread(JProgressBar jBar,BcMasImportData bcImport,int j)
{
this.jBar = jBar;
this.bcImport = bcImport;
this.count = j;
}

public void run()
{
int min = 0;
int max = 100;
int total = 0;
int values = 0;
int free = 0;

jBar.setMinimum(min);
jBar.setMaximum(max);
jBar.setValue(values);

while(true && !Thread.interrupted())
{
//setFree(countTemp);
total = count;
free = bcImport.getInsertCount();
values = free*100/total;

jBar.setValue(values);
jBar.setString(values+"%");
                
//setCountTemp(free);

if(free >= total)
{
this.stop();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}

}
}}

解决方案 »

  1.   

    你应该把业务操作数据库的逻辑写在 BcMasProcessThread 这个类里面, 每插入一条记录跟新一下进度条,这样就可以了。
    你现在的问题是在BcMasProcessThread 里用了sleep(1000),如果整个操作就没有1秒呢?
    就算是超过一秒的,更新也是不连贯的。