定期的なタスクを実行するswingTimerを開始するフレームがあります。問題は、フレームを閉じると、タスクがまだ続行されていることです。閉じるボタンを押すと、swingTimerを停止します。フレーム終了時にjTimerを停止する
EXIT_ON_CLOSE
とDISPOSE_ON_CLOSE
を指定しようとしましたが、これらは機能しません。誰かが私が何をすべきか知っていますか?
ありがとう
定期的なタスクを実行するswingTimerを開始するフレームがあります。問題は、フレームを閉じると、タスクがまだ続行されていることです。閉じるボタンを押すと、swingTimerを停止します。フレーム終了時にjTimerを停止する
EXIT_ON_CLOSE
とDISPOSE_ON_CLOSE
を指定しようとしましたが、これらは機能しません。誰かが私が何をすべきか知っていますか?
ありがとう
スイングタイマーには停止方法があります。 「フレーム」(JFrame ??)がWindowListenerで終了する場合は、いつでも呼び出すことができます。
また、私のテストでは、EDTが停止した場合、Timerはそれ自身で停止する必要があります。たとえば、次のように
import java.awt.event.*;
import javax.swing.*;
public class StopTimer extends JPanel {
private static final float FONT_SIZE = 32;
private Timer myTimer;
private JLabel timerLabel = new JLabel("000");
private int count = 0;
public StopTimer() {
timerLabel.setFont(timerLabel.getFont().deriveFont(FONT_SIZE));
add(timerLabel);
int timerDelay = 1000;
myTimer = new Timer(timerDelay , new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
count++;
timerLabel.setText(String.format("%03d", count));
System.out.println("count: " + count);
}
});
myTimer.start();
}
private static void createAndShowUI() {
JFrame frame = new JFrame("StopTimer");
frame.getContentPane().add(new StopTimer());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
これはあなたが、私は何をやったん助けていない場合:あなたの問題を示し、小さなコンパイルおよび実行可能なプログラムを投稿してください。
何がjTimerですか?あなたはスイングタイマーについて話していませんか? EDTが終了すると、スイングタイマーが止まるはずです。また、それを完全に止めることができるstop()メソッドもあります。 –
ごめんなさい、スイングタイマーはJTimerではない – Roger