n秒后如何停止Swing计时器?

时间:2019-06-23 20:51:41

标签: java swing timer

在执行计时器时,我试图使图像与RaffleImage();闪烁,我的角色不受任何碰撞的影响,我希望它仅受到2秒的影响,因此计时器可以执行仅持续2秒钟,然后完成。

我尝试过减去System.currentTimeMillis(),但是我从此方法创建的任何变量的值始终相同,这使我从该减法中得到零。

您知道在经过几秒钟后如何停止或暂停计时器吗?

immuneTimer = new Timer(50, new ActionListener() {  
        @Override
    public synchronized void actionPerformed(ActionEvent e) {
    long initMillis = System.currentTimeMillis();
     if (System.currentTimeMillis() - initMillis > 2000 ) { // this substract gives me 0
        initImages();
        setImmune(false); // so this never reached
        immuneTimer.stop();
      } else {
            raffleImage(); //its executing like forever;
             }
      }
});

1 个答案:

答案 0 :(得分:0)

Swing计时器触发一个ActionEvent。您可以从事件中使用getSource()获取事件的来源。将该源转换为摆动计时器object,并使用该源将其关闭。

要知道何时将其关闭,您需要具有一个变量count,该变量应调用摆动计时器的次数。当变量达到该数量时,将其关闭。


int elapsedTime = 0;
int timerDelay = 50;
int max = 2000;
public void actionPerformed(ActionEvent ae) {
     elapsedTime += timerDelay; // you could use getDelay here but it
                                // is in milliseconds.
     if (elapsedTime >= max) {
        Timer s = (Timer)ae.getSource();
        s.stop();
     }
     // rest of code
}