Oi, tenhum um objeto (JDialog), nele criei uma subclasse que extende uma thread que deve ficar executando enquanto o formulario estiver aberto. O problema eh que depois de fechar o formulario, a thread continua rodando…
COMO FINALIZA-LA?
public class MyForm(){
private class MyThread extends Thread(){
public void run(){
while (true){
System.out.print(".");
try {
Thread.sleep(500);
}catch (InterruptedException ee){
}
}
}
}
MyThread t = null;
public MyForm(){
t = new MyThread();
t.start();
}
}
Embora chama o interrupt() no evento windowClosing, a thread continua executando, e sei que o t.interrupt() foi chamado, pq coloquei o println(“fechando…”) antes de chama-lo, ele imprime a msg FECHANDO… e depois continua printando os . que a minha trhread tah printando…
private class ChecaModificado extends java.lang.Thread {
private boolean sinalFechar = false;
public void run() {
while (!sinalFechar) {
System.out.print(".");
try {
Thread.sleep(500);
} catch (InterruptedException ee) {
ee.printStackTrace();
}
}
}
public void fecha(){
this.sinalFechar=true;
}
}
lah no windowClosing eu toh chamando t.fecha() e dah certo, mas gostaria de ter outro meio, pra falar a verdade, mesmo chamando o t.fecha() nao estou bem certo se a thread continua ou nao na memoria…
eh exatamente pra isso que se usa a IterruptedException. dentro do seu catch dessa exception faca sinalFechar=true, e chame o t.interrupt naquele seu listener.
[quote=Paulo Silveira]eh exatamente pra isso que se usa a IterruptedException. dentro do seu catch dessa exception faca sinalFechar=true, e chame o t.interrupt naquele seu listener.