Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PedroGenio

[Resolvido] Thread

Recommended Posts

Tenho um sistema onde evoco o jframe no static main,

porêm fiz uma thread para pegar os clicks do mouse e do teclado,

 

estarto a thread e executa uma primeira vez com o click, se a condição que eu desejo não for verdadeira, espera o próximo click, mas para isso, gostaria que a thread pausasse, em um determinado periodo para não ficar executando todas as vezes que clicasse,

tentei com sleep e wait, wait não funcionou, com o sleep, todo o sistema para no tempo determinado, e não somente a thread que fiz,

 

ja tentei com o (nome da thread).sleep(), Thread.sleep(), mas para todo o projeto.

 

Alguém tem alguma ideia que possa me ajudar?

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

sleep é um método estático, não adianta usar o nome da classe ele para a que estiver rodando.

wait se não me engano só funciona em código sincronizado.

 

Posta o código, assim podemos analisar melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado pela atenção,

 

ja consegui resolver, estava fazendo de forma errada, fazendo thread pra chamar o evento, e seria o contrario, do evento, eu estarto a thread, e a thread faz a verificação do tempo.

 

postarei o código no qual consegui resolver meu problema.

 


   public class TimeOut implements Runnable {  
        private static final long INTERVALO = 1000; //Verifica de 1 em 1 segundo  
     
        private volatile long ultimoEvento;  
        private long maxTempoOcioso;  
      
        public TimeOut(long maxTempoOcioso) {  
           this.maxTempoOcioso = maxTempoOcioso;  
        }  
     
       public void run() {  
           ultimoEvento= System.currentTimeMillis();  
           try {             
              while(System.currentTimeMillis() - ultimoEvento < maxTempoOcioso) {  
                  Thread.sleep(INTERVALO);                            
              }   
              JOptionPane.showMessageDialog(null, "A sessão foi expirada, o sistema será encerrado!",   
                  "INLOC SISTEMAS", OptionPane.INFORMATION_MESSAGE);    
              System.exit(0);            
           }  
           catch (InterruptedException e) {}  
       }  
     
       public void notificarEvento()   
       {  
           ultimoEvento = System.currentTimeMillis();  
       }  
  }  

a outra parte, onde tem o listener e chamo a thread

    final TimeOut timeout = new TimeOut(dados.getOcioso() * 60) * 1000);  
      
    Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {    
       public void eventDispatched(AWTEvent event) {    
          String eventText = event.toString();  
          if (eventText.contains("PRESSED") || eventText.contains("RELEASED")) {  
             timeout.notificarEvento();  
          }  
       }  
   }, AWTEvent.MOUSE_EVENT_MASK | AWTEvent.KEY_EVENT_MASK);  
     
   Thread t = new Thread(timeout);  
   t.setName("Timeout thread");  
   t.setDaemon(true);  
   t.start();  

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.