现在,我有一些代码看起来是这样的:
Timer timer = new javax.swing.Timer(5000, myActionEvent);
据我看到的(和Javadoc文档的Timer
类 ),定时器将等待5000毫秒(5秒),触发的动作事件,再次等待5000毫秒,火,等等。 但是,我想获得的行为是启动计时器,该事件被激发,定时等待5000毫秒,再次开火,然后再次烧制前等待。
除非我错过了什么,我没有看到一个方法来创建一个定时器不触发之前的等待。 是否有一个良好,清洁的方式来模拟此?
只能指定在构造函数中的延迟。 您需要更改初始延迟(触发第一个事件之前的时间)。 你不能在constuctor集,但你可以使用setInitialDelay Timer类的方法。
如果你需要第一次发射之前无需等待:
timer.setInitialDelay(0);
我不知道这是否会是有很大帮助,但是:
Timer timer = new javax.swing.Timer(5000, myActionEvent){{setInitialDelay( 0 );}};
我不会用一个定时器可言,而是使用ScheduledExecutorService
import java.util.concurrent.*
...
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(myRunnable, 0, 5, TimeUnit.SECONDS);
请注意, scheduleAtFixedRate()
和scheduleWithFixedDelay()
具有略微不同的语义。 查阅JavaDoc并找出你需要哪一个。
简单的解决方案:
Timer timer = new javax.swing.Timer(5000, myActionEvent);
myActionEvent.actionPerformed(new ActionEvent(timer, 0, null));
但我喜欢timer.
setInitialDelay
(0)
好了很多。
文章来源: How do you create a javax.swing.Timer that fires immediately, then every t milliseconds?