У меня есть два потока. Один работает бизнес-логику от моего класса BulkProcessor который обновляет() переменную BulkProcessor.getPercentComplete:Обновление потока Java jProgressBar не обновляется при вызове потока снова
public void run(){
new SwingWorker<Void,Void>() {
protected Void doInBackground() throws Exception {
BulkProcessor.main(jTextField0.getText(), jTextField1.getText());
return null;
};
}.execute();
}
Мой другой поток является то, что обновляет ценность JProgressBar в моем BulkGUI классе:
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();
}
Выполнение этого в первый раз работает точно так, как ожидалось. Однако выбор кнопки «Процесс» второй раз не влияет на jProgressBar. Локальная переменная percentComplete в потоке обновления остается на уровне 100 и не обновляется, как это делает первый запуск. Я тестировал переменную percentComplete из класса BulkProcessor, и эта переменная действительно обновляется, как ожидалось. Поэтому по какой-то причине поток не извлекает значения обновления с помощью BulkProcessor.getPercentComplete() во второй раз, когда вызывается поток. У кого-нибудь есть представление об этом? Буду признателен за любую оказанную помощь.
пожалуйста, причина в этой идее – mKorbel
Таким образом, пользователь может обрабатывать несколько раз без перезапуска GUI – TaylorSmolik