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 キーを押すと、すでに 400K に達しています。
また、興味深いことに、ロード画面には 3 つの「外観の変更」があります。1 つは paintComponent メソッドの 100 回の呼び出しで、もう 1 つは 200 回の呼び出しで、もう 1 つは 300 回の呼び出しで、カウンターを 0 にリセットします。外観の変化。最初のケースでは、実行時間が長い if ステートメントを使用すると、変更が見られますが、期待したほど頻繁ではありません。2 番目のケースでは、それらがまったく表示されません (発生が速すぎると想像できます)。
私の質問は、実行時間にこの非常に大きな違いが生じる理由と、paintComponent メソッドが呼び出されるように見える回数と、ループが反復される 400.000 回の違いの原因は何ですか?
すべてのアイデアが高く評価されました。