现在,我的代码看起来像这样:
Timer timer = new javax.swing.Timer(5000, myActionEvent);
根据我所看到的(和Javadocs for the Timer
class),计时器将等待5000毫秒(5秒),触发动作事件,等待5000毫秒,再次触发,依此类推。但是,我想要获得的行为是计时器启动,事件被触发,计时器等待5000毫秒,再次触发,然后等待再次触发。
除非我遗漏了某些东西,否则我没有办法创建一个在开火前不等待的计时器。是否有一种良好,干净的方式来模仿这个?
答案 0 :(得分:10)
您只能在构造函数中指定延迟。您需要更改初始延迟(触发第一个事件之前的时间)。您不能在constuctor中设置,但可以使用Timer类的setInitialDelay方法。
如果你在第一次射击前不需要等待:
timer.setInitialDelay(0);
答案 1 :(得分:2)
我不确定这是否会有很大帮助,但是:
Timer timer = new javax.swing.Timer(5000, myActionEvent){{setInitialDelay( 0 );}};
答案 2 :(得分:0)
我根本不会使用计时器,而是使用ScheduledExecutorService
import java.util.concurrent.*
...
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(myRunnable, 0, 5, TimeUnit.SECONDS);
请注意,scheduleAtFixedRate()
和scheduleWithFixedDelay()
的语义略有不同。阅读JavaDoc并找出您需要的那个。
答案 3 :(得分:0)
简单的解决方案:
Timer timer = new javax.swing.Timer(5000, myActionEvent);
myActionEvent.actionPerformed(new ActionEvent(timer, 0, null));
但我更喜欢timer.
setInitialDelay
(0)
。