我有一個switch語句一個while循環:添加System.out.println()會減慢執行速度(很多)?
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出來,已經達到了400K。
另外好奇的是,加載屏幕有三個'外觀變化',一個是100個調用paintComponent方法,一個是200個調用,另一個是300個調用,將計數器重置爲0.所以基本上,每100個滴答它應該有一個外觀變化。在第一種情況下,if語句具有較長的執行時間,但我看到了這些變化,但遠遠沒有我期望的那麼頻繁。在第二種情況下,我根本沒有看到它們(我可以想象它們會發生得太快)。
所以我的問題是,什麼在執行時間造成了這麼大的差異,什麼導致了paintComponent方法似乎被調用的次數的差異,以及循環迭代的400.000倍?
所有的想法appreceated。
[This](http://stackoverflow.com/questions/4120528/repaint-in-a-loop)應該有所幫助。 – st0le