我有一个带有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 out时,计数器通常在130K左右,我看它移动到400K。
但是,如果我删除打印此数字的if语句:
if(tick < 400000) {
System.out.println(tick);
}
加载屏幕永远不会移动,当我alt + tab out时,已经达到了400K。
同样好奇的是加载屏幕有三个“外观变化”,一个是100个调用它的paintComponent方法,一个是200个调用,一个是300个调用,它将计数器重置为0.所以基本上,每100个滴答它应该有外观变化。 在第一种情况下,使用if语句,执行时间较长,我看到了更改,但到目前为止并没有像我期望的那样频繁。 在第二种情况下,我根本看不到它们(我可以想象它们会发生得太快)。
所以我的问题是,是什么造成了执行时间的这个相当大的差异,是什么导致paintComponent方法似乎被调用的次数差异,以及循环迭代的400.000倍?
所有的想法都被接受了。