2016-04-10 7 views
1

私はタイマーをJavaで作成して表示します。JFrame私のタイマーを私の電話タイマーに圧縮すると、私の電話のタイマーはそれより速いのですがなぜですか?Javaでタイマーを作成

私はタイマーで10秒ごとに10秒に設定しました。

これはタイマーのコードです:

import javax.swing.Timer; 

    int min = 0, sec = 0, hundredSec = 0; 

    timer = new Timer(10, new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      hundredSec++; 

      if(hundredSec >= 99) 
      { 
       sec++; 
       hundredSec = 0; 
      } 

      if(sec >= 59) 
      { 
       min++; 
       sec = 0; 
      } 

      timerL.setText(String.format("%02d:%02d:%02d", min, sec, millisec)); 

     } 
    }); 

の悪い英語のため申し訳ありません。

お返事ありがとうございます。

+0

Javaタイマーは正確であるようには設計されていません。代わりに、タイマーが開始された時間を保存してから、 'actionPerformed'メソッドで現在の時刻と開始時刻の差を計算し、そこからテキストを更新する必要があります。 – pcarter

+0

どのくらい異なるです、Javaはリアルタイムスケジュールされたタスクを開発するように設計されていないので、timeUnitは少し変わることができます...... –

答えて

0

タイマーに渡す遅延は、イベントが実行される正確な時間ではなく、イベントがキューに入れられるまでの遅延です。前回の呼び出しから10msが経過したことを確認できますが、10ms経過したことを確認することはできません。

あなたはおそらく(可能な限りあなたのコードに、わずかの変更で、これを行うには別の/より最適な方法は確かにあります)このような何かしたい:

import javax.swing.Timer; 

Date dt = new Date(); 

timer = new Timer(10, new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     int min = 0, sec = 0, hundredSec = 0; 

     long millisec = (new Date()).getTime() - dt.getTime(); 
     hundredSec = (millisec/10) % 100; 
     sec = (millisec/1000) % 60; 
     min = (millisec/60000); 

     timerL.setText(String.format("%02d:%02d:%02d", min, sec, hundredSec)); 

    } 
}); 

夫婦の問題がここにあります(timerLが欠落し宣言、setText呼び出しでミリ秒の参照を修正しましたが、上記と同じですから、ちょうどスニペットを投稿していると仮定します。

1

私はあなたの問題は3番目のコード行と関係があると考えています。 java API docsは次のように述べています。「遅延パラメータは、初期遅延とイベント発生までの遅延の両方をミリ秒単位で設定するために使用されます。これは、毎回10ミリ秒の遅延があることを意味します。遅延が発生する可能性があります。 10とは対照的に、それはゆっくりと背後に落下し、即座に実行します0にを変更することにより

timer = new Timer(0, new ActionListener()); 

:あなたがコードの行を変更することができることを修正するには。タイマーの詳細については、this articleを読むことをお勧めします。

+0

しかし、遅延に0を入れれば、タイマーは速く走ります。 私は初期遅延を設定し、遅れを4に設定した場合はそれを確認し、速くするには5を設定します。 – user5327287

関連する問題