Java swing Timer循环减慢

时间:2015-06-08 20:21:10

标签: java swing timer

所以,我试图用Java中的Swing创建一个小游戏。我创建的游戏循环使用了一个javax.swing Timer。 此计时器(通常)每5ms调用一次循环。

Timer tm = new Timer(5, this);
tm.start();

@Override
public void actionPerformed(ActionEvent e) {
    game.tick();
    repaint();
    revalidate();
}

我的代码可能非常繁重,因为它包含了很多for循环,所以我并不感到意外,因为它并不是每5毫秒循环运行一次。 相反,它以相当稳定的160fps流动,至少它在我的计算机上。当我在我兄弟的计算机上尝试我的游戏时(较少的RAM),它最初以相同的160fps运行,但在大约2分钟之后,帧降至稳定的60fps。

我个人觉得很奇怪,帧在相同的时间间隔内下降很多,并且在其他时间保持稳定。

如果有人遇到类似的问题,并知道是什么原因造成的,请告诉我。提前致谢。 〜Krikke

1 个答案:

答案 0 :(得分:3)

您应该使用Timer.scheduleAtFixedRate方法而不是构造函数参数。

从文档(强调我的):

  

在固定费率执行中,每次执行都是相对于   初始执​​行的预定执行时间。如果执行是   因任何原因而延迟(例如垃圾收集或其他背景   活动),两个或多个执行将快速连续发生   “跟上来。” 从长远来看,执行的频率将是   恰好是指定时期的倒数(假设系统   Object.wait(long)的时钟是准确的。)

正如@HovercraftFullOfEels的评论中所提到的,你应该在Swing Event Thread上进行任何Swing调用。有关详细信息,请参阅this tutorial