[Resolvido] Thread não repetindo?

10 respostas
G

Tenho uma classe chamada User, que é o usuário:

public void connect() {
        Runnable runnable = new Client();
        Thread thread = new Thread(runnable);
        thread.start();

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GUI().setVisible(true);
            }
        });
    }
O método connect por sua vez cria um thread e cria o GUI. Porém o thread não fica executando, ele apenas mostra a mensagem uma vez. a Mensagem da classse Client:
public class Client implements Runnable {

    public void run() {
        System.out.println("teste");
    }
}

porque o thread não fica executando?

Grato desde já, Gustavo Borba.

10 Respostas

Eric_Yuzo

A thread faz o que tem que fazer e encerra.

Se quiser que repita, é necessário um laço de repetição.

G

Que tipo de laço de repetição eu poderia por? Eu queria um por exemplo, enquanto o aplicativo estiver aberto, executar thread.

Diabo_Loiro

use um loop com uma flag.
emquando for para rodar deixa a flag com true.
quando o seu programa for encerrar seta a flag para false.
pseudo codigo
while(flag) .

G

Eu até já conheço o while(true) mas eu acho que ele executa muito rápido e causa que o código seguinte fique inacessível. Então coloquei ele como última cosia no método e tentei usar thread.sleep(500); mas o Netbeans diz que thread.sleep(); em loops pode causar problemas de desempenho. Como posso driblar isso?

Diabo_Loiro

se quiser deixar mais lento tem usar thread.sleep mesmo.

G

então cara, tentei o seguinte:

Runnable runnable = new Client(); Thread thread = new Thread(runnable); while(true) { thread.start(); }

mas recebo essa exeção:

<blockquote>Exception in thread “main” java.lang.IllegalThreadStateException

teste

at java.lang.Thread.start(Thread.java:638)

at application.bin.client.User.connect(User.java:23)

at application.bin.Main.main(Main.java:21)</blockquote>

Nessa exeção, ele diz que eu estou iniciado o thread de maneira incorreta(?)
Sobre o thread não repetir, no livro que eu estou lendo “Use a Cabeça: Java”, ele mostra um simples exemplo de thread que repete e é idêntico ao meu! O que há de errado com o meu?

Eric_Yuzo

O problema é que a thread está sendo iniciada mais de uma vez.

O laço deve estar no método run de seu Runnable:
public class Client implements Runnable {

    public void run() {
        while(true) {
            System.out.println("teste");
            Thread.sleep(1000);
        }
    }
}
G

Valeu cara!

Eric_Yuzo

Esqueci de por no exemplo que o Thread.sleep declara InterruptedException.

Mas que bom que resolveu seu problema.

Falou…

ViniGodoy

Você ignora o que o Netbeans está dizendo.

Criado 15 de dezembro de 2010
Ultima resposta 15 de dez. de 2010
Respostas 10
Participantes 4