Gnt, estou com um programa com múltiplas janelas e preciso q em uma delas os dados sejam atualizados periodicamente toda vez q a mesma estiver aberta. O problema é que em todos os exemplos q eu vejo, as threads são disparadas dentro do método main, e não é este o caso em questão. É possível? Como?
Como eu inicializo uma Thread fora do Método MAIN?
2 Respostas
Cara, não tem jeito, qualquer programa em Java é iniciado com uma chamada ao método main(). No caso de aplicativos com GUI ou servidores Web por exemplo, o que acontece é que o método main() é chamado e então o programa entra em loop infinito. Você até pode criar threads a partir de outros métodos, mas a primeira chamada do programa é o método main(), não tem jeito.
Nesse caso, o que você pode fazer é iniciar a Thread no mesmo evento que abre a janela. E uma última dica, antes de trabalhar com Threads e GUI, dê uma lida na classe SwingWorker:
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
Seguinte:
Você vai precisar executar um metodo no construtor da sua classe que tem o JFrame
Seu JFrame vai precisar tambem de estender Thread.
public class JFrame extends Thread {
public JFrame() throws InterruptedException {
atualiza();
}
public void atualiza() throws InterruptedException {
System.out.println("1");
metodoQueAtualizaOsDadosAqui();
sleep(5005);//defina o tempo em mile segundos
atualiza2();
}
//esse metodo aqui é so de kaô, a Thread precisa disso para brincar de ping pong
public void atualiza2() throws InterruptedException {
System.out.println("2");
sleep(5005);//defina o tempo em mile segundos
atualiza();
}
public static void main(String[] args) throws InterruptedException {
new JFrame();
}
}
O que aconteceu.
O construtor foi iniciado, chamando o metodo atualiza. A partir dai o atualiza() vai brincar por tempo indefinido com o metodo atualiza2();
Não precisa mais nada. Não precisa disparar Thread dentro de metodo main. Porque tudo acontece nessa classe, pois estende de Thread