Não consigo encerrar o Timer

Olá Dres?? Tudo bem?? Estou com um problema… estou a usar a classe Timer… e preciso q em dado momento seu action performed seja interrompido… mas infelizmente o comando stop() é completamente ignorado…

  public void moverPessoa(final GerenciadorDesenho desenho, final int posicaoArray){
	   Timer timer = new Timer(60, new ActionListener(){
		   public void actionPerformed(ActionEvent e){
               if(getAgente().detectaColisao()){
            	   decidirDirecao();
            	   setRoda(false);
                   stop();            	 
           	  //aqui a bolinha deveria ser removida do arraylist    	  
               }else{
		   	   setX(getAgente().getX() + getDx());
			   setY(getAgente().getY()+ getDy());
			   getAgente().setX(getX());
			   getAgente().setY(getY());
			   desenho.repaint();}
		   }
	   });
	   timer.start();

   }
   

Como faço para sair da ação do Timer… quando a colisão ocorrer??

Desde ja agradeço.

Você esta utilizando java.util.Timer ou javax.swing.Timer ?

com java.util.Timer eu fazia assim:


t.cancel

mas não obtive sucesso ao tentar retomar o Timer, até gostaria de uma opinião da galera por que uma ecessão era gerada?

agora com javax.swing.Timer


private Timer t;

public MyClass(int tempo)
{
   t = new Timer(tempo, new Action());

   ...
   t.start;

}


public void parar() //para parar o Timer
{
  t.stop; 
}

da uma olhadinha aqui que vai lhe ajudar muito

Pelo que ví de Timer até hj, ele é como uma Thread em que você especifica o tempo que ela vai realizar uma determinada ação. Como um contador regressivo.

Na definição da Ação você pode condicioná-la a uma determinada variável estática que você controla de fora do Timer.

Sua variável para controle…

...
private boolean static continuar = true;
...

Seu Timer

timer = new Timer(1000, new ActionListener(){
   public void actionPerformed(ActionEvent e){
      while(continuar){
         // faz algo...
       }
   }
});

O controlador do Timer

...
if(xxx)
   continuar = false;
...

:roll:

que é exatamente o que você está fezendo hehehehe

...
if(getAgente().detectaColisao()){  
              decidirDirecao();  
               setRoda(false);  
                stop();                   
              //aqui a bolinha deveria ser removida do arraylist            
}
...

Rapaz… verifique se esse seu getAgente está Singleton mesmo, caso tenha definido assim… Ou faça esse detecta colisão setar uma variável de controle como exemplifiquei com o ‘continuar’ aí em cima.