如何在java中循环延迟点数组?

时间:2014-02-10 20:37:54

标签: java for-loop delay point

我试图通过延迟来循环一个Point数组,但没有任何反应,我没有得到错误。 以下是我的代码的示例:

public class Class {    
    private Point[] points;
    private int start, delay;

    public Class() {
        points = new Point[] {
            new Point(1, 1),
            new Point(2, 1),
            new Point(1, 2)
        };
        start = System.nanoTime();
        delay = 500;
    }

    public void update() {
        for(int i = 0; i < points.length; i++) {
            long elapsed = (System.nanoTime() - startT) / 1000000;
            if(elapsed > delay) {
                System.out.println("x: " + points[i].x);
                System.out.println("y: " + points[i].y);
                start = System.nanoTime();
            }
        }
    }
}

更新功能中的所有内容都在工作,但for循环除外。

编辑: 这是一个只有1个线程的java Swing应用程序。

2 个答案:

答案 0 :(得分:3)

你的一个问题是你使用的是if块而不是while循环。 if块只检查一次,看到条件为false,并跳过它。 while循环将循环,直到条件为false。

  • 对于大多数延迟,您可以使用通用Timer对象,例如java.util.Timer和java.util.TimerTask对象。
  • 对于Swing GUI中的延迟,您将使用javax.swing.Timer
  • 一般非Swing计算的其他选项,包括使用包含Thread.sleep(...)调用的while循环。
  • 同时考虑使用ScheduledThreadPoolExecutor进行非Swing延迟。

修改
关于你的编辑:

  

编辑:这是一个只有1个线程的java Swing应用程序。

如果您需要更多帮助,那么正如我们已经提到的那样,请在您的问题中提供更多详细信息。

答案 1 :(得分:2)

要睡眠大约一段时间,请使用Thread.sleep(millis);
不要指望精度超过30毫秒。