Pessoal, já tentei de diversas formas mas não consigo atualizar um JProgressBar durante um processo que trabalha com alguns arquivos.
Usei Threads, SwingUtilities.invokeLater, etc. Minha última implementação usa uma variável que é alterada durante as etapas desse processo indicando a percentagem concluída. Criei uma Thread que depois de iniciada, fica atualizando a JProgressBar a partir dessa variável. São portanto duas Threads : uma para o processo e outra para a JProgressBar. Mas quando disparo o processo (por um JButton) toda a interface trava até que o processo seja concluído, inclusiva a progressBar.
Do que estou me esquecendo ?
generateButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
processFiles();
...
protected void processFiles() {
ProgressThread progressThread = new ProgressThread(this, getProgressBar());
SwingUtilities.invokeLater(progressThread);
progressCounter = 0;
processFile("1.Importado HW", referenceFile, tempFileImportedHW);
progressCounter = 30;
processFile("2.Importado SW", tempFileImportedHW, tempFileImportedSW);
progressCounter = 60;
processFile("2.Importado SW CHIND", tempFileImportedSW, DEFAULT_GENERATED);
progressCounter = 100;
...
package view.util;
import javax.swing.JProgressBar;
import view.WizardCSVExcelWindow;
public class ProgressThread implements Runnable{
private WizardCSVExcelWindow parent;
private JProgressBar progressBar;
public ProgressThread(WizardCSVExcelWindow parent, JProgressBar progressBar) {
this.parent = parent;
this.progressBar = progressBar;
}
public void run() {
int value = 0;
for(int c = 0; c < 10; c++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
value = parent.getProgressCounter();
progressBar.setValue(value);
progressBar.repaint();
}
}
}