【问题标题】:Stopping swing Timer after it have executed one time执行一次后停止摆动定时器
【发布时间】:2013-05-05 06:46:40
【问题描述】:

在我正在制作的游戏中,我有一个强化道具,我只想显示 10 秒然后消失。因此,每当您启动电源时,我都会运行一个摇摆Timer,它的初始延迟设置为 10 秒 (10_000),并且我还将重复设置为 false,因此它应该只运行一次。

每当我第一次启动电源时,它只会按预期显示 10 秒,但当我再次启动时,它只会在随机的时间内可见(但永远不会超过 10 秒),因此看起来像确实会重复。那么,当setRepeats(false); 不起作用时,我怎样才能让它在运行一次后停止呢?

这是启动电源时发生的情况的代码。

if(!power.getPowerUp()){
 double xAirdrop = xSize - 500;
 double yAirdrop = ySize - 500;
 power.setX(Math.random() * xAirdrop + 64);
 power.setY(Math.random() * yAirdrop + 150);
 power.setPowerUp(true);
 Timer powerTimer = new Timer(10_000, new ActionListener(){
  public void actionPerformed(ActionEvent e){
   power.setPowerUp(false);  
   power.setWidth(power.getCrate().getWidth(null) + 250);
   power.setHeight(power.getCrate().getHeight(null) + 250);
  }
 });
 powerTimer.setInitialDelay(10_000);
 powerTimer.setRepeats(false);
 powerTimer.start();
}

【问题讨论】:

    标签: java swing timer repeat


    【解决方案1】:

    问题是您的计时器仍在运行,即使它没有触发事件,因此当您运行start() 时,它处于循环中间的某个位置。这导致它运行的时间少于 10 秒。您需要在后续运行中运行 restart() 而不是 start()。它甚至可能适用于第一次运行。

     powerTimer.setInitialDelay(10_000);
     powerTimer.setRepeats(false);
     powerTimer.restart();
    

    来自 javadoc:

    重启() 重新启动计时器,取消任何未决的触发并使其以初始延迟触发。

    http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html#restart()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多