あなたはnon-daemon threadにあなたのコードを実行する必要があります。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
public class CurrentTimePrinter implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println(new Date());
}
}
これはテスタークラスがある:
私は、次のクラスでActionListenerインタフェースとactionPerformedメソッドを実装しています。現在のところ、Timer
がデーモンスレッドとして起動しますが、main
がJVMを終了するために発生します。
あなたはこのように(非デーモンです)EDTからタイマーを起動することができます。
public static void main(String[] args) {
ActionListener listener = new CurrentTimePrinter();
SwingUtilities.invokeLater(() -> new Timer(1000, listener).start());
}
、これは生きているJVMを保持します。
スレッド上のいくつかの余分ノート:
swing.Timer
はGUIをで使用するためにカスタマイズされた単純化されたクラスです。これにより、柔軟性が低下するという欠点が生じる。このようなタイマーがすべて実行されるスレッドはバックグラウンドで設定され、デーモンです。
util.Timer
にはデフォルトで非デーモンスレッドがあり、柔軟性はcreated otherwiseです。各タイマーには独自のスレッドがあります。
Swing GUIを作成する必要があります。または、Swingイベントディスパッチスレッドを実行し続ける必要があります。 –