Como eu inicializo uma Thread fora do Método MAIN?

2 respostas
java
F

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?

2 Respostas

rmendes08

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

Jonas_B_a_r_r_o_s

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

Criado 8 de julho de 2016
Ultima resposta 8 de jul. de 2016
Respostas 2
Participantes 3