2011-06-27 15 views
1

定期的なタスクを実行するswingTimerを開始するフレームがあります。問題は、フレームを閉じると、タスクがまだ続行されていることです。閉じるボタンを押すと、swingTimerを停止します。フレーム終了時にjTimerを停止する

EXIT_ON_CLOSEDISPOSE_ON_CLOSEを指定しようとしましたが、これらは機能しません。誰かが私が何をすべきか知っていますか?

ありがとう

+2

何がjTimerですか?あなたはスイングタイマーについて話していませんか? EDTが終了すると、スイングタイマーが止まるはずです。また、それを完全に止めることができるstop()メソッドもあります。 –

+0

ごめんなさい、スイングタイマーはJTimerではない – Roger

答えて

3

スイングタイマーには停止方法があります。 「フレーム」(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(); 
     } 
     }); 
    } 
} 

これはあなたが、私は何をやったん助けていない場合:あなたの問題を示し、小さなコンパイルおよび実行可能なプログラムを投稿してください。

+1

+1、セクシーなコード.. – mre

+1

@little:LOL!私は私のコードを記述するために多くの形容詞を見てきましたが、私はここで繰り返すことはできませんが、**決して**セクシー!笑いをありがとう! –

+0

@Hovercraft、大歓迎です!誰かがSwingを正しく使うのを見てうれしいです。 :) – mre

関連する問題