我有两个线程。一个是从我的 BulkProcessor 类运行业务逻辑,该类更新 BulkProcessor.getPercentComplete() 变量:
public void run(){
new SwingWorker<Void,Void>() {
protected Void doInBackground() throws Exception {
BulkProcessor.main(jTextField0.getText(), jTextField1.getText());
return null;
};
}.execute();
}
我的另一个线程是在我的 BulkGUI 类中更新 jProgressBar 的值:
public void update(){
jProgressBar0.setStringPainted(true);
jProgressBar0.repaint();
new SwingWorker<Void,Integer>() {
protected Void doInBackground() throws Exception {
do
{
percentComplete = BulkProcessor.getPercentComplete();
publish(percentComplete);
Thread.sleep(100);
} while(percentComplete < 100);
return null;
}
@Override
protected
void process(List<Integer> progress)
{
jProgressBar0.setValue(progress.get(0));
}
}.execute();
}
单击“进程”按钮时,我调用了两个线程:
private void jButton0ActionActionPerformed(ActionEvent event) {
run();
update();
}
第一次运行它完全符合预期。但是再次选择 Process 按钮对 jProgressBar 没有影响。更新线程中的局部变量 percentComplete 保持在 100,并且不会像第一次运行那样更新。我测试了 BulkProcessor 类中的 percentComplete 变量,这个变量实际上按预期更新。因此,由于某种原因,线程在第二次调用线程时没有使用 BulkProcessor.getPercentComplete() 获取更新值。有人对此有任何见解吗?任何帮助深表感谢。