Mostrar resultado e continuar executando

6 respostas
L

Pessoal,

Tenho uma pequena aplicação e nela um botão que executa varias taferas, no final
de cada tarefa imprimo o resultado no JLabel, mas ele só aparece qd termina de
exucutar todas as tarefas.

Gostaria de apresentar o resultado a cada termino de tarefa …

if (e1.getSource()==bot1){
tarefa01();	
JLabel jLabel1 = new JLabel("   Tarefa 01 OK.", fig,JLabel.LEFT);
jPanel2.add(jLabel1); 
janela.add(jPanel2, BorderLayout.CENTER); // adicional o painel 1 no centro da janela		    
janela.setVisible(true);

tarefa02();	
JLabel jLabel2 = new JLabel("   Tarefa 02 OK.", fig,JLabel.LEFT);
jPanel2.add(jLabel2); 
janela.add(jPanel2, BorderLayout.CENTER); // adicional o painel 2 no centro da janela		    
janela.setVisible(true);

tarefa03();	
JLabel jLabel3 = new JLabel("   Tarefa 03 OK.", fig,JLabel.LEFT);
jPanel2.add(jLabel3); 
janela.add(jPanel2, BorderLayout.CENTER); // adicional o painel 3 no centro da janela		    
janela.setVisible(true);
}

Vlw …

6 Respostas

B

o bom seria, fazer um thread processar estes resultados e ir atualizando a label conforme as tarefas forem executadas.

I

Cara, tive o mesmo problema que você num programinha de envio de emails, enquanto ele enviava eu queria saber o total enviado. Não consegui de outro jeito a não ser fazendo uma Thread e enquanto processava ia atualizando a label.

L
não estou conseguindo usar Thread, estou fazendo assim mas continua incluindo o jLabel só no final da execução.
if (e1.getSource()==bot1){   
     tarefa01();   

     Thread t = new Thread();
     t.start();
  
     tarefa02();    

}  

public void run(){
	JLabel jLabel1 = new JLabel("Teste", JLabel.LEFT);
	jPanel2.add(jLabel1);
	janela.add(jPanel2, BorderLayout.CENTER); 
	janela.setVisible(true);
	}
B

Isso não é thread safe. Todo código que interage com a Swing deve ser executado no Event Dispatch Thread.

Experimente usar o SwingWorker para enviar os emails, e usar os métodos publish e process relatar o progresso e atualizar a GUI.

juliofsn

Eu criaria o Label antes de iniciar a Thread e na thread iria chamar as tarefas e mudar apenas o texto do label.

M

No seu caso pode-se usar um Runnable mesmo. Instancie os JLabel’s antes de executar suas tarefas e dentro do método run() apenas use um setText() para alterar seu estado. Não se esqueça de iniciar uma nova Thread usando o comando:

SwingUtilities.invokeLater(this);

O código acima supõe que a própria classe da interface gráfica implementa Runnable. Caso seja outra classe que faça isso, troque o this pela instância da classe adequada.

Criado 29 de janeiro de 2010
Ultima resposta 29 de jan. de 2010
Respostas 6
Participantes 6