缺少打印语句时循环不会退出

时间:2016-08-07 03:44:55

标签: java loops

所以我正在尝试为游戏编写代码,让我在游戏失败时开始游戏。我使用while循环(标记为“第0循环”)来使游戏重新开始。我使用一个计时器,当游戏结束时它会自动停止。然后,为了防止第0个循环运行,我有一个空的内循环(标记为“第一循环”),直到游戏结束。一旦游戏结束,我会使用另一个内循环(标记为“第二循环”)来“聆听”箭头键按下(这不是此问题的焦点)。

这是我的问题。出于某种原因,当第一个循环中没有print语句时,第二个循环不运行 。如果我在第一个循环中放置任何print语句,则第二个循环将在游戏结束时运行。让第一个循环保持空状似乎不会退出,因此它会阻止代码进展。为什么会这样? (注意:我尝试在第一个循环中放入其他而不是print语句,而第二个循环没有运行)

以下是重要代码的概述:

   // zeroth loop
   while (true) {

        //...

        Timer timer = new Timer(speed, null);
        timer.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                //...
                if (endGame) {
                    timer.stop();
                }
            }
        });

        timer.start();

        // first loop
        while (!endGame) { /* empty loop */ }

        boolean arrowKeyNotPressed = true;

        // second loop
        while (arrowKeyNotPressed) {
            System.out.println("second loop");
            //...
            // arrowKeyNotPressed = false;
        }
    }

1 个答案:

答案 0 :(得分:0)

您的空循环可能会消耗所有可用的CPU。您可以添加睡眠以避免占用CPU周期:

while (!endGame) { 
   Thread.sleep(100); //milliseconds
}