2016-08-07 8 views
0

Also ich versuche, Code für ein Spiel zu schreiben, mit dem ich das Spiel beginnen kann, wenn der Spieler verliert. Ich benutze eine while-Schleife (mit "nullter Schleife" markiert), um das Spiel neu beginnen zu lassen. Ich benutze einen Timer, der sich selbst beendet, wenn das Spiel vorbei ist. Um die nullte Schleife am Laufen zu halten, habe ich eine leere innere Schleife (markiert als "erste Schleife"), die läuft, bis das Spiel vorbei ist. Sobald das Spiel vorbei ist, benutze ich eine andere innere Schleife (markiert als "zweite Schleife"), um auf eine Pfeiltaste zu hören (was nicht der Fokus dieser Frage ist).While-Schleife nicht beendet, wenn eine Druckanweisung fehlt

Hier ist meine Frage. Aus irgendeinem Grund läuft die zweite Schleife nicht nur, wenn ich keine Druckanweisung in der ersten Schleife habe. Wenn ich irgendeine Druckanweisung in die erste Schleife einfüge, läuft die zweite Schleife , wenn das Spiel endet. Wenn die erste Schleife leer gelassen wird, scheint sie nicht beendet zu werden, wodurch der Code nicht fortschreitet. Warum passiert dies? (Anmerkung: Ich habe versucht, etwas andere als eine print-Anweisung in der ersten Schleife setzen und die zweite Schleife lief nicht)

Hier eine Übersicht des wichtigen Code:

// 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; 
     } 
    } 

Antwort

0

Ihre leere Schleife Macht die gesamte verfügbare CPU verbrauchen. Sie können einen Schlaf hinzufügen, um CPU-Zyklen zu vermeiden:

+0

Sie sagen, JVM kann nur 'while (true);' aus dem Code entfernen? – Roman

+0

@Roman Sie haben Recht. Das wird die aktuelle Thread-Ausführung blockieren. – apruden