[Resolvido] Thread não repetindo?

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

[code]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);
        }
    });
}[/code]

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:

[code]public class Client implements Runnable {

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

}[/code]

porque o thread não fica executando?

Grato desde já, Gustavo Borba.

A thread faz o que tem que fazer e encerra.

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

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

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) .

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?

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

então cara, tentei o seguinte:

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

mas recebo essa exeção:

[quote]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)[/quote]

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?

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

O laço deve estar no método run de seu Runnable:

[code]public class Client implements Runnable {

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

}[/code]

Valeu cara!

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

Mas que bom que resolveu seu problema.

Falou…

Você ignora o que o Netbeans está dizendo.