Если вы НЕ пометили свой поток как демон, вызвав yourThread.setDaemon(true)
, он продолжит работу, даже если основной поток в вашем приложении завершил работу. Помните, что вы должны позвонить setDaemon
перед началом потока.
Подробности см. В моем ответе на предыдущий вопрос.
Я полагаю, что в вашем случае вы должны поддерживать флаг «стоп», который отслеживается вашим потоком таймера. Поток таймера должен выйти при чтении этого флага как «ложь». Вы можете добавить WindowListener в свой jframe и при закрытии окна установить флаг 'stop' на true
Вот пример кода для того, что я предлагаю:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class JFrameTest {
public static void main(String[] args) {
final Timer t = new Timer();
t.start();
JFrame jf = new JFrame("GOPI");
jf.setVisible(true);
jf.setSize(100, 100);
jf.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
t.stopTimer();
}
});
System.out.println("JFrameTest.main() DONE");
}
}
class Timer extends Thread {
boolean stop = false;
@Override
public void run() {
for (int i = 0; i < 50; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (stop)
break;
System.out.println("Counting :" + i);
}
System.out.println("Timer exit");
}
public void stopTimer() {
stop = true;
}
}