我有一个带有 switch 语句的 while 循环:
while(true) {
switch(state) {
case LOADING :
//THIS IS THE IMPORTANT PART
//view loading screen (already set by default)
contentPane.repaint();
if(tick == 400000) {
//state = GameState.MENU;
System.out.println("Reached " + gameTick);
}
break;
case MENU :
//view menu
break;
//some other cases without content, left them out here
}
tick++;
if(tick < 400000) {
System.out.println(tick);
}
if(tick == Long.MAX_VALUE) {
tick = 0;
}
}
现在这段代码执行得很好,它显示了加载屏幕(只要它被重复调用,它上面就有移动的点,所以我知道它什么时候停止),输出从 1 计数到 400000 和那个数字印刷
399998
399999
Reached 400000
(最后3行输出)
应用程序进入全屏状态,当我 alt+tab 退出时,计数器通常在 130K 左右,我看着它移动到 400K。
但是,如果我删除打印此数字的 if 语句:
if(tick < 400000) {
System.out.println(tick);
}
加载屏幕永远不会移动,当我 alt + tab out 时,已经达到 400K。
同样奇怪的是,加载屏幕有三个“外观变化”,一个在 100 次调用它的 paintComponent 方法时,一个在 200 次调用时,一个在 300 次调用时,这会将计数器重置为 0。所以基本上,它应该有每 100 个滴答声外观变化。在第一种情况下,使用执行时间较长的 if 语句,我看到了变化,但远没有我预期的那么频繁。在第二种情况下,我根本看不到它们(我可以想象它们发生得太快了)。
所以我的问题是,是什么造成了执行时间的如此大的差异,以及导致paintComponent 方法似乎被调用的次数和循环迭代400.000 次的差异的原因是什么?
所有想法都表示赞赏。