tenho uma aplicacao que executa uma thread
e fica esperando um determinado status
quando acontece esta situacao ela precisa abrir um jframe ou jdialog
exibir ele e executar uma serie de procedimentos
ja que esta jframe ou jdialog ira mostrar os passos em execucao…
porem eu primeiro preciso mostrar a jframe
e em seguida ir mostrando os passos…
hoje eu faco o seguinte:
frame.setvisible(true)
so que quando eu faco isso ela fica presa eu queria que ela mostrasse e continuasse a executar os outros passos do meu metodo
como eu faria isso:
O problema é que a thread principal, que normalmente é responsável por desenhar as janelas(manter elas funcionando, clicáveis, etc) está parada esperando por alguma coisa.
Tu tens duas opções, ou atualizar suas telas na mesma rotina que executa o serviço pesado… ou criar uma nova thread que monitora esse serviço pesado e atualizar os valores das janelas.
Ou seja:
1 thread executa o serviço
1 thread que faz analise do status das rotinas rodando na thread anterior, e atualiza as telas
1 thread que é responsavel por desenhar as telas(normalmente a thread principal)
Lembre-se de ter o cuidado de não passar muito tempo em loops que fazem pequenas verificações, pois isso consome muita CPU.
Ou seja, evite algo tipo isso:
public void run(){
while(true){
if(rotinaPesada.estaPronta) break;
}
fazAlgumaCoisaDepoisQueTermina();
}
Normalmente há boas maneiras de evitar isso.(como disparar eventos que acordam outras threads)