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.