Java 计时器循环显示0个刻度,而不是60个刻度

Java 计时器循环显示0个刻度,而不是60个刻度,java,timer,nanotime,Java,Timer,Nanotime,我有以下代码: public void run(){ long lastTime=System.nanoTime(); final double amountOfTicks=60.0; double ns=1000000000/amountOfTicks; double delta=0; int updates=0; int frames=0; long timer=System.currentTimeMillis(); while

我有以下代码:

public void run(){
    long lastTime=System.nanoTime();
    final double amountOfTicks=60.0;
    double ns=1000000000/amountOfTicks;
    double delta=0;
    int updates=0;
    int frames=0;
    long timer=System.currentTimeMillis();
    while(running){
        long now=System.nanoTime();
        delta+=(now-lastTime)-ns;
        lastTime=now;
        if(delta>=1){
            tick();
            updates++;
            delta--;
        }
        render();
        frames++;

        if((System.currentTimeMillis()-timer)>1000){
            timer+=1000;
            System.out.println(updates+" Ticks, FPS "+frames);
            updates=0;
            frames=0;
        }
    }
    stop();
}
这应该显示“60个刻度,FPS 9000000”,但它会显示“0个刻度,FPS 9000000”。
这是为什么?我如何修复它?

在为其调试器安装NetBeans之后,我发现delta是一个负数。事实证明,这只是一个简单的印刷错误


delta+=(现在是最后一次)-ns应该是
delta+=(现在是最后一次)/ns

在打印之前,您是否检查了
更新
是否增加了一次?您的布尔参数running设置在提供的代码之外,因此现在很难确定while循环的结束。您是否记得首先将其设置为true?这是一个教科书上的调试问题。只需连接一个调试器并遍历代码,看看出了什么问题。循环正在工作。我在
main
中调用了一个
start
方法,该方法设置
running=true
。滴答声和FPS计数器在控制台中以恒定速率显示,因此我确信它正在工作。@devnull如果(delta>=1)
是一个问题,为什么