Pessoal, estou fazendo uma pequena (mas pequena mesmo) aplicação em Swing. A aplicação já está funcionando sem a Progress Bar. Então resolvi melhorar e colocar uma JProgressBar para dar um FeedBack ao usuário de uma tarefa que está rodando. Essa tarefa é uma Thread separada.
Eu tenho a minha classe visual Swing (gerei no NetBeans e editei algumas coisas no Eclipse). Omiti linhas de códigos desnecessários e que deixava a classe muito longa. Principalmente por causa do NetBeans:
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class Main extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
public Main() {
initComponents();
}
private void initComponents() {
...
progress = new javax.swing.JProgressBar();
...
}
private void btnFileSelectActionPerformed(ActionEvent evt) {
...
}
private void btnVerificarWorkspaceActionPerformed(ActionEvent evt) {
...
}
private void btnOrganizarWorkspaceActionPerformed(ActionEvent evt) {
...
if (!stop) {
try {
this.progress.setMinimum(0);
this.progress.setMaximum(projetosSelecionados.size());
this.progress.setStringPainted(true);
this.progress.setVisible(true);
Configuracao c = new Configuracao(projetosSelecionados);
Thread t = new Thread(c);
t.start();
while (!c.isFinalizado()) {
this.progress.setValue(c.getNumeroProjetosFinalizados());
}
JOptionPane.showMessageDialog(null,
"Workspace configurada", "Informação",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
...
private javax.swing.JProgressBar progress;
...
}
Ta tudo funcionando, só essa progress bar que não fica enchendo. Não sei se estou furando em alguma configuração dela. Realmente não sei. Abaixo vai o código que a Thread dispara!
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Configuracao implements Runnable {
private boolean finalizado;
private List<Map<String, String>> projetos;
private int projetosFinalizados;
public Configuracao(List<Map<String, String>> projetos) {
this.projetos = projetos;
this.projetosFinalizados = 0;
}
@Override
public void run() {
this.finalizado = false;
Iterator<Map<String, String>> i = this.projetos.iterator();
while (i.hasNext()) {
Map<String, String> projeto = (Map<String, String>) i.next();
try {
Workspace.setarConfiguracao((String) projeto.get("path"));
this.projetosFinalizados++;
} catch (Exception e) {
e.printStackTrace();
}
}
this.finalizado = true;
}
public boolean isFinalizado() {
return this.finalizado;
}
public int getNumeroProjetosFinalizados() {
return this.projetosFinalizados;
}
}
Alguém sabe porque essa progress bar nem da sinal de vida?
Valeu