Hoe u mijn Java-programma gedurende 2 seconden kunt pauzeren

Ik ben nieuw in Java en maak een klein spel voor de praktijk.

if (doAllFaceUpCardsMatch == false) {
        //run pause here//
        concentration.flipAllCardsFaceDown();
} else {
        concentration.makeAllFaceUpCardsInvisible();
}

Ik wil het spel hier twee seconden pauzeren voordat het

concentration.flipAllCardsFaceDown();

Hoe zou ik het gaan pauzeren?


Antwoord 1, Autoriteit 100%

U kunt gebruiken:

Thread.sleep(2000);

of

java.util.concurrent.TimeUnit.SECONDS.sleep(2);

Houd er rekening mee dat beide methoden InterruptedExceptiongooien, wat een gecontroleerde uitzondering is, zodat u dat moet betrappen of in de methode verklaren.

EDIT:
Na het vangen van de uitzondering zal uw code er als volgt uitzien:

if (doAllFaceUpCardsMatch == false) {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        concentration.flipAllCardsFaceDown();
} else {
        concentration.makeAllFaceUpCardsInvisible();
}

Aangezien u nieuw bent, zou ik aanraden om te leren hoe u een uitzonderingsafhandeling kunt doen als u een beetje comfortabel bent met Java.


Antwoord 2, Autoriteit 10%

Voor degenen die gewoon een snelle hack willen zonder een bibliotheek te hoeven brengen …

public class Timing {
    public static void main(String[] args) {
            int delay = 1000; // number of milliseconds to sleep
            long start = System.currentTimeMillis();
            while(start >= System.currentTimeMillis() - delay); // do nothing
            System.out.println("Time Slept: " + Long.toString(System.currentTimeMillis() - start));
    }
}

Voor gaming met 60 fps met hoge precisie is dit waarschijnlijk niet wat je wilt, maar misschien vinden sommigen het nuttig.


Antwoord 3, autoriteit 5%

Je kunt hier een soortgelijk bericht vinden: Hoe vertragen in Java?

In principe wat er in het oude bericht staat. Je zou java.util.concurrent.TimeUnit kunnen gebruiken

   import java.util.concurrent.TimeUnit;
    if (doAllFaceUpCardsMatch == false) {
        TimeUnit.SECONDS.sleep(2);
        concentration.flipAllCardsFaceDown();
    } else {
        concentration.makeAllFaceUpCardsInvisible();
    }

Antwoord 4

U kunt Thread.currentThread().sleep(2000) gebruiken om de huidige thread 2 seconden (2000 milleseconden) te pauzeren. Je moet dit omringen met een try/catch in het geval van InterruptedExceptions.


Antwoord 5

Een andere zeer eenvoudige manier is het creëren van de volgende methode:

public static void pause(long timeInMilliSeconds) {
    long timestamp = System.currentTimeMillis();
    do {
    } while (System.currentTimeMillis() < timestamp + timeInMilliSeconds);
}

Other episodes