2011-08-03 11 views
0

なぜこれは動作しませんか?javaタイマーは機能しません

毎秒印刷したいと思います。

ありがとうございました。

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.Timer; 

public class test2 { 

public static void main(String[] args) { 

    Timer timer = new Timer(1000, new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("hello"); 
     } 
    }); 

    timer.start(); 
    } 
} 
+0

[我々はウィンドウを生成しない場合は、なぜタイマーが動作しない?]の可能複製(http://stackoverflow.com/questions/2478505/why-timer-does-not-work-if-we-do-未生成-ウィンドウ) – Grodriguez

答えて

5

タイマーを1回実行する前にプログラムが終了します。 mainメソッドが終了すると、プログラムは終了し、すべてのスレッドも終了します。これには、あなたのタイマースレッドが含まれます。

は、次の試してみてください:メインスレッドが終了した後、あなたのプログラムはすぐに終了します

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.Timer; 

public class test2 { 

    public static void main(String[] args) { 

     Timer timer = new Timer(1000, new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       System.out.println("hello"); 
      } 
     }); 

     timer.start(); 
     } 

     while (true) /* no operation */; 
    } 
} 
+0

ながら、(真)は、問題を修正おかげ – Ricco

+0

おかげで、その作業が、他の解決策はありますか? – mesutpiskin

-1

コンソールアプリケーションを書き込むために、インターフェイスライブラリ(java.awt)を使用しています。 startへの呼び出し直後から出るのコードを防ぐ何もない

public static void main(String[] args) throws Exception { 
    while(true){ 
     Thread.sleep(1000); 
     System.out.println("hello"); 
    } 
} 
+3

これは期待通りに動作しないコードの最小量に減少GUIアプリケーションのための出発点、であるかもしれません。 –

0

はこれを試してみてください。 timer.start();の後にThread.sleep(10000);を追加すると、メッセージが表示されます。

+1

しかし、thread.sleepはプログラム全体を一時停止しませんか? – Ricco

+0

いいえ、現在のスレッドを一時停止します。 – Grodriguez

1

おそらくタイマはデーモンスレッドで開始され、起動直後にメインスレッドが終了します。

デーモンスレッドだけが残るとすぐに、JVMを終了する必要があります。だから、メインスレッドを生かしておく必要があります。テスト目的のために単純なThread.sleep(10000);がうまくいくはずです。

+0

あなたの答えは概念的に正しいですが、スイングタイマーは別のデーモンスレッド上では動作しません。むしろ、イベントディスパッチスレッドからチェックされます。 – Grodriguez

+0

訂正していただきありがとうございます。私は7年間Swingと仕事をしていません。 ;) –

0

ので、タイマーは別のスレッドで実行されるため、それは実行に時間がありません。メインメソッド終了の前にThead.Sleep呼び出しを追加するとコードが実行されます。

関連する問題