每隔X秒运行一次代码(Java)

时间:2015-03-17 22:09:20

标签: java timer intervals

这不是非常必要的,我只是好奇地看到别人的想法。我知道它没用,只是为了好玩。

现在我知道如何做到这一点,它相当简单。我只是试图找出一种方法来做到这一点,并不需要创建新的变量来挤占我的班级。

这是我将如何做到的:

float timePassed = 0f;
public void update(){
    timePassed += deltatime;//Deltatime is just a variable that represents the time passed from one update to another in seconds (it is a float)
    if(timePassed >= 5){
        //code to be ran every 5 seconds
        timePassed -= 5f;
    }
}

我想知道的是,如果没有时间传递变量,有办法做到这一点。我有一个statetime(自循环开始以来的时间)变量,我用于其他可以用于此的东西。

1 个答案:

答案 0 :(得分:2)

如果目标确实是每X秒运行一次代码,我的第一选择就是使用util.Timer。另一个选择是使用ScheduledExecutorService,它在util.Timer上添加了一些增强功能(更好的异常处理,一个)。

我倾向于避免使用Swing.Timer,因为我更喜欢让EDT(事件调度线程)整洁。

很多人写了一个游戏循环"这比你开始的更接近。搜索"游戏循环"可能会给你几个变种,取决于你是否希望保持稳定的速度。

有时候,在一个人不想连续测试和重置的情况下,可以通过使用" AND"来组合这两个功能。操作。例如,如果您将AND 63转换为整数,则可以使用范围0-63进行迭代。这适用于功率为2的范围。

根据您的调用代码的结构,您可能会传入" statetime"变量作为参数并测试它是否大于你想要的X.如果你这样做,我假设被调用代码中的一个步骤将重置" statetime"为零。

另一个想法是传入" startTime"更新方法。然后,您的计时器将测试currentTimeMillis和startTime之间的差异,以查看X秒是否已经过去。同样,你调用的代码应该设置一个新的" startTime"作为这个过程的一部分。这种方法的好处是不需要增加经过的时间。

只要我正在制定想法:也可以创造未来" targetTime"变量并测试currentTimeMillis() - targetTime> 0

startTime或targetTime可以是不可变的,这通常会提供一些轻微的优势,具体取决于它们的使用方式。