2017-11-19 21 views
1

私は今のところ、半分ごとにPrinting...を印刷するだけのプログラムを作っています。私の理解からスイングタイマーがインターバルでイベントを発生させない

package mainPackage; 

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

public class Ticker { 

    public static void tick() { 
     System.out.println("Printing..."); 
    } 

    public static void main(String args[]) { 

     ActionListener timerListener = new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       tick(); 
      } 
     }; 

     Timer mainTimer = new Timer(500,timerListener); 
     mainTimer.start(); 
    } 
} 

mainTimerオブジェクトが500msごとtimerListenerによって処理されるイベントを発射する必要があります。ここに私のコードです。私はこのコードを実行すると何も起こらない、私は何か明白な行方不明ですか?スイングevent dispatch thread

+0

を使用することを検討してください私はあなたがフォローしていないことを知っています:https://stackoverflow.com/help/someone-answers – c0der

+0

これを私に指摘していただきありがとうございます。このエラーを修正したので、あなたの答えが何であるか教えていただけますか? – Psear

+1

'SwingTimer'はEDTで動作します。 EDTがイベントハンドラに入る前にアプリケーションスレッドが終了するため、イベントを取得しません。作業するには、少なくとも最初のイベント(たとえば600ミリ秒)までメインスレッドをスリープ状態にする必要があります。 –

答えて

1

利用スイングタイマー:

public static void main(String args[]) { 

    ActionListener timerListener = new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      tick(); 
     } 
    }; 

    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      Timer mainTimer = new Timer(500,timerListener); 
      mainTimer.start(); 
     } 
    }); 
} 

あなたはタイマーからGUIを変更する予定がない場合は、あなたの過去の質問を見ているので、私は私の答えを削除したjava.util.Timer

+0

あなたの説明は拡大する必要があります - なぜこの操作をこの方法で実行する必要がありますか?なぜコードが失敗したのですか? – MadProgrammer

関連する問題