Srs,
Estou tentando implementar uma barra de progresso para acompanhar a criação de um objeto. Na verdade, acompanhar um método desse obj.
Mas quando executo, o frame da barra de progresso aparece “transparente” (frame sem dados). Depois que o obj é criado é que os dados (barra indicando 100%) aparecem.
Já tentei com thread e swingwork. O que está errado?
Com Thead:
Objeto a ser monitorado:
...
BarraProgresso barraProgresso = new BarraProgresso(15);
Thread t1 = new Thread(barraProgresso);
t1.start();
...
//entra em um for
barraProgresso.atualizaBarra(i);
...
Barra de progresso
public class BarraProgresso implements Runnable {
private int andamento = 0;
private int max;
private JLabel label;
public JProgressBar pb;
private JFrame frame;
public BarraProgresso(int max) {
this.max = max;
}
public void atualizaBarra(int i) {
this.andamento = i;
this.pb.setValue(andamento);
if (this.max == andamento)
this.frame.setVisible(false);
}
@Override
public void run() {
frame = new JFrame("teste");
pb = new JProgressBar(0, this.max);
pb.setValue(this.min);
pb.setStringPainted(true);
label = new JLabel("Carregando.......");
JPanel panel = new JPanel();
panel.add(pb);
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
panel1.add(panel, BorderLayout.NORTH);
panel1.add(label, BorderLayout.CENTER);
panel1.setBorder(BorderFactory.createEmptyBorder(10, 30, 10, 30));
frame.setContentPane(panel1);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
}
Agora com Swingworker
Objeto a ser monitorado:
...
BarraProgresso barraProgresso = new BarraProgresso(max);
barraProgresso.execute();
...
BarraProgresso:
public class BarraProgresso extends SwingWorker<Void, Void> {
private int andamento = 0;
private int max;
private JLabel label;
public JProgressBar pb;
private JFrame frame;
public BarraProgresso(int max) {
this.max = max;
}
public void atualizaBarra(int i) {
this.andamento = i;
this.pb.setValue(andamento);
if (this.max == andamento)
this.frame.setVisible(false);
}
@Override
public Void doInBackground() {
frame = new JFrame("teste");
pb = new JProgressBar(0, this.max);
pb.setValue(0);
pb.setStringPainted(true);
label = new JLabel("Carregando.......");
JPanel panel = new JPanel();
panel.add(pb);
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
panel1.add(panel, BorderLayout.NORTH);
panel1.add(label, BorderLayout.CENTER);
panel1.setBorder(BorderFactory.createEmptyBorder(10, 30, 10, 30));
frame.setContentPane(panel1);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
return null;
}
}
Agradeço a ajuda.