Tentando JprogressBar com thread e swingworker

0 respostas
R

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.

Criado 27 de outubro de 2011
Respostas 0
Participantes 1