gpt4 book ai didi

java - 执行一次后停止 Swing 计时器

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:27 27 4
gpt4 key购买 nike

在我制作的游戏中,我有一个 Prop ,我只想显示 10 秒然后消失。因此,无论何时启动电源,我都会运行一个 swing Timer,它的初始延迟设置为 10 秒 (10_000),并且我还将 repeats 设置为 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();
}

最佳答案

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

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

来自javadoc:

restart() Restarts the Timer, canceling any pending firings and causing it to fire with its initial delay.

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

关于java - 执行一次后停止 Swing 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com