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?
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!
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