Criar temporizador

Galera,

Tenho um JCheckBox que, quando selecionado,

deve fazer uma pesquisa a cada 1 min.

e quando retirar a seleçao, deve matar este “temporizador”

alguém pode me ajudar?

Veja a documentação de javax.swing.Timer.

http://java.sun.com/javase/6/docs/api/javax/swing/Timer.html

Dica importante:

Não deixe nenhuma exceção “vazar” de seu método actionPerformed. Se isso ocorrer, o timer irá parar.

Amigo, em java temos a classe TimerTask (http://java.sun.com/j2se/1.4.2/docs/api/java/util/TimerTask.html).
Esta classe deve ser usada da mesma forma que você utiliza multiplas threads em java (ela implementa Runnable).

Acho que é isso que você precisa.

talvez isto te ajude…

declare um atributo Thread t global…
e depois…


t = new Thread(new Runnable(){
		  public void run() {
			  try {
				t.sleep(1000);
	metodoQfazAlgo();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
				
			}
	  });

para finalizar basta chamar t.stop(); no evento de desmarcação do checkbox…

neste caso o sleep esta configurado para 1 segundo

E ae luistiagos beleza?

Cara, to tendo um problema…

estou fazendo desta maneira:

 
if(jRadioButton1.isSelected()){
        
         Thread t = new Thread( 
                new Runnable() {
                    public void run(){
                        try{
                            t.sleep(1000);
                            System.out.println("Executando        método");
                            
                        }catch(InterruptedException e){
                            e.printStackTrace();
                        }
                        
                    }
         
         });
                        
        
    }else{
        
        t.stop();
        
    }

porém, nao consigo utilizar o t no else.

tentei este:


Thread t;

if(jRadioButton1.isSelected()){
        
         t = new Thread( 
                new Runnable() {
                    public void run(){
                        try{
                            t.sleep(1000);
                            System.out.println("Executando método");
                            
                        }catch(InterruptedException e){
                            e.printStackTrace();
                        }
                        
                    }
         
         });
            
            

                
        
    }else{
        
        t.stop();
        
    }
        

porém nada também.

estou errando muito?

Neste caso utilizei um JRadioButton

Tenta colocar a variável Thread fora do if

Thread t;
System.out.println("Vou Executar o ActionPerformed");
if (jRadioButton1.isSelected()) {
	 t = new Thread(new Runnable() {
		public void run() {
			try {
				t.sleep(1000);
				System.out.println("Executando método");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	});
} else {
	System.out.println("Parando Thread");
	t.interrupt();
}

[quote=Tché]E ae luistiagos beleza?

Cara, to tendo um problema…

estou fazendo desta maneira:

 
if(jRadioButton1.isSelected()){
        
         Thread t = new Thread( 
                new Runnable() {
                    public void run(){
                        try{
                            t.sleep(1000);
                            System.out.println("Executando        método");
                            
                        }catch(InterruptedException e){
                            e.printStackTrace();
                        }
                        
                    }
         
         });
                        
        
    }else{
        
        t.stop();
        
    }

porém, nao consigo utilizar o t no else.

tentei este:


Thread t;

if(jRadioButton1.isSelected()){
        
         t = new Thread( 
                new Runnable() {
                    public void run(){
                        try{
                            t.sleep(1000);
                            System.out.println("Executando método");
                            
                        }catch(InterruptedException e){
                            e.printStackTrace();
                        }
                        
                    }
         
         });
            
            

                
        
    }else{
        
        t.stop();
        
    }
        

porém nada também.

estou errando muito?[/quote]
Veja isso:

[code]import javax.swing.JRadioButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Crasse {

private volatile boolean running;

public Crasse() {
	prepareRadio();
}

private void prepareRadio() {
	JRadioButton radio = new JRadioButton();
	radio.addChangeListener(new ChangeListener(){
		public void stateChanged(ChangeEvent e) {
			if(((JRadioButton)e.getSource()).isSelected()){
				Crasse.this.startThread();
			} else {
				Crasse.this.stopThread();
			}
		}
	});
}

private void startThread() {
	new Thread(new Runnable(){
		public void run() {
			Crasse.this.running = true;
			while(Crasse.this.running){
				System.out.println("Executando...");
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {}
			}
		}
	}).start();
}

private void stopThread() {
	running = false;
}

public static void main(String[] args) {
	new Crasse();
}

}[/code]

O seu problema é que uma Thread morta não pode ser reutilizada com um novo start(). É preciso instanciá-la novamente para dar um novo start()!

Outra coisa… o método stop() está deprecado a partir do Java 5, o ideal é fazer como eu demonstrei, utilizando uma variável boolean running… ela é volatile porque isso impede que a JVM utilize cache da variável em memória, impedindo a leitura da mesma em estado inconsistente… nesse caso isso é suficiente, mas se mais Threads acessarem a mesma variável haverá problema de concorrência!

malandro…

curti!!

vo tenta aqui… só um cadino perae

[quote=Tché]malandro…

curti!!

vo tenta aqui… só um cadino perae[/quote]
Qualquer dúvida é só perguntar… esse assunto dá pano pra manga!

:wink:

Thread.stop() // Metodo depreciado pois pode gerar um deadlock 

O que tem que fazer é colocar um criterio de parada dentro da sua rotina.

Att
Ricoldi

EDITADO: Grande Fox McCloud respondeu T-U-D-O!, rs…

Fox McCloud vc é f#$%$!!!

valeu brother!!!

Cara, agora eu queria inserir uma label do lado, que faria tipo um contador regressivo enquanto nao faria o método que quero.

preciso criar outra Thread?

Valeu