你如何创建一个将立即触发,然后每隔T毫秒的javax.swing.Timer中?(How do yo

2019-07-18 04:48发布

现在,我有一些代码看起来是这样的:

Timer timer = new javax.swing.Timer(5000, myActionEvent);

据我看到的(和Javadoc文档的Timer类 ),定时器将等待5000毫秒(5秒),触发的动作事件,再次等待5000毫秒,火,等等。 但是,我想获得的行为是启动计时器,该事件被激发,定时等待5000毫秒,再次开火,然后再次烧制前等待。

除非我错过了什么,我没有看到一个方法来创建一个定时器不触发之前的等待。 是否有一个良好,清洁的方式来模拟此?

Answer 1:

只能指定在构造函数中的延迟。 您需要更改初始延迟(触发第一个事件之前的时间)。 你不能在constuctor集,但你可以使用setInitialDelay Timer类的方法。

如果你需要第一次发射之前无需等待:

timer.setInitialDelay(0);


Answer 2:

我不知道这是否会是有很大帮助,但是:

Timer timer = new javax.swing.Timer(5000, myActionEvent){{setInitialDelay( 0 );}};


Answer 3:

我不会用一个定时器可言,而是使用ScheduledExecutorService

import java.util.concurrent.*

...

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

请注意, scheduleAtFixedRate()scheduleWithFixedDelay()具有略微不同的语义。 查阅JavaDoc并找出你需要哪一个。



Answer 4:

简单的解决方案:

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?