4


0

今、私はこのように見えるコードを持っています:

タイマーtimer = new javax.swing.Timer(5000、myActionEvent);

私が見ているもの(および TimerクラスのJavadocs]によると、タイマーは待機します。 5000ミリ秒(5秒)、アクションイベントを起動し、5000ミリ秒待機し、再度起動します。 ただし、取得しようとしている動作は、タイマーが開始され、イベントが発生し、タイマーが5000ミリ秒待機し、再度起動した後、再度起動するまで待機することです。

私が何かを逃したのでなければ、私は発砲する前に待たないタイマーを作成する方法を見ません。 これをエミュレートするための良い、きれいな方法はありますか?

4 Answer


10


コンストラクタでのみ遅延を指定できます。 初期遅延(最初のイベントが発生するまでの時間)を変更する必要があります。 コンストラクタに設定することはできませんが、タイマーの setInitialDelayメソッドを使用することはできます。クラス。

あなたが最初の発砲の前に待つ必要がないならば:

timer.setInitialDelay(0);


2


これが大いに役立つかどうかはわかりませんが、

タイマーtimer = new javax.swing.Timer(5000、myActionEvent){{setInitialDelay(0);}};


0


私はまったくTimerを使わないで、代わりに ScheduledExecutorServiceを使う

import java.util.concurrent。*

...

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleAtFixedRate(myRunnable、0、5、TimeUnit.SECONDS);

http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html#scheduleAtFixedRate(java.lang.Runnable,%20long,%20long,%20javaがあることに注意してください。 util.concurrent.TimeUnit)[scheduleAtFixedRate()]およびhttp://java.sun.com/javase/6/docs/api/java/util / concurrent /ScheduledExecutorService.html#scheduleWithFixedDelay(java.lang.Runnable、意味が多少異なる%20long、%20long、%20java.util.concurrent.TimeUnit)[scheduleWithFixedDelay()]。 JavaDocを読み、必要なものを見つけてください。


0


簡単な解決策:

タイマーtimer = new javax.swing.Timer(5000、myActionEvent); myActionEvent.actionPerformed(new ActionEvent(timer、0、null));

しかし、私は `timer.`が好きです。 。