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