如何减慢Java Swing应用程序的速度

时间:2013-02-01 08:00:04

标签: java swing

我正在制作只有电脑玩的游戏演示,但速度太快了。我需要它来展示每一个动作。

程序使用while循环,它没有任何支持事件监听器的东西。 它只需要计算机来移动。

3 个答案:

答案 0 :(得分:3)

你可以有一个后台任务触发移动并在移动之间适当地等待。类似的东西:

Runnable moveTask = new Runnable () {
    public void run() {
        while (true) {
            Thread.sleep(...);
            SwingUtilities.invokeLater(theActualMoveHere());
        }
    }
}
new Thread(moveTask).start();

你需要添加一个停止机制(通过中断)并且可能会使逻辑变得复杂,但基本的想法应该有效。

作为睡眠的替代方案,您可以每隔x毫秒安排一次Timer的移动。请注意,Timer的分辨率不是很好,可能高达30ms,因此可能不够精确。

答案 1 :(得分:0)

您可以使用线程睡眠方法等待X时间。有些事情是:

Thread.sleep(4000);

请参阅http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html

如果您需要每秒循环一定次数,您可以计算每次迭代使用的时间,然后休眠所需的时间。例如:

boolean cont = true;
long time0, timeForEach = 1000, time1 = System.currentTimeMillis();
while (cont) {

// Do my things here.

time0 = System.currentTimeMillis();
try {
  if (timeForEach > time0-time1) {
    Thread.sleep(timeForEach - (time0-time1));
  }
} catch (InterruptedException e) {
}
time1 = time0;

}

答案 2 :(得分:0)

当我想减慢代码中的内容时,我通常使用定时器,睡眠或等待功能。 你可能有一个迭代/循环(for,while,for in等)的函数,用于每次移动或类似的东西。你可以在这种循环的每次迭代之间留出时间。

另一种策略是让计算机在向最终用户展示之前生成它将要进行的所有动作。然后,当您向用户显示每个移动时,您可以决定一次移动所花费的时间。