Wartepause in Java?
Hallo!
Ich habe das Problem, dass ich für ein Programm eine wartepause brauch, bei der nicht das ganze Programm wartet sondern nur in einer if abrage alles für 2 sekunden wartet. Thread.sleep ist also ausgeschlossen. Gibt es so etwas wie "wait(2000)" oder sowat?
LG
LurBanane
2 Antworten
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Wahrscheinlich nutzt du nicht den Event Thread.
Wenn du mit Swing, JavaFX oder AWT arbeitest gibt es immer einen Event Thread, in dem du UI Änderungen publizieren solltest. Wenn du also ausgehend von einem Ereignis 2 Sekunden warten möchtest um etwas anzuzeigen UND parallel die Spielwelt weiterlaufen soll, dann musst du mit Thread.sleep arbeiten, aber halt in einem anderen Thread.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
if ist eine Bedingung. Was spricht denn gegen Thread.sleep()? Etwas Quellcode wäre sicherlich von Vorteil um das richtig bewerten zu können.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Schau dir mal andere Beispiele an, z.B. hier: https://stackoverflow.com/questions/2258066/java-run-a-function-after-a-specific-number-of-seconds
![](https://images.gutefrage.net/media/user/LurBanane/1614627387615_nmmslarge__423_0_1080_1080_1b00d393704bec5f179788f552a021f9.jpg?v=1614627388000)
if(won == true){
g.setColor(Color.GREEN);
g.drawString("Gewonnen!", Var.screenWidth / 2 - 300, 300);
g.setColor(Color.BLACK);
g.setFont(new Font("Cooper Black", Font.PLAIN, 150));
g.drawString("" + playerPoints1 + ":", playerPoints2, screenWith / 2 - 110, 200);
//Wartepause von 2 Sekunden
//Titelbildschirm wird angezeigt
won = false;
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/JanMarcel01/1545064833528_nmmslarge__96_96_1728_1728_1530d37dedc00fac79f60049c3b6a4db.jpg?v=1545064834000)
Das Problem ist, dass bei Thread.sleep() das gesamte Programm stoppt, er möchte, dass nur der Inhalt der if-Abfrage stoppt.
![](https://images.gutefrage.net/media/user/LurBanane/1614627387615_nmmslarge__423_0_1080_1080_1b00d393704bec5f179788f552a021f9.jpg?v=1614627388000)
Wenn ich Thread.sleep() nehme wird auch wenn es vorher passiert nichts gezeichnet. Wenn die Variable gewonnen auf true geht soll einmal mit g.drawString "Gewonnen" stehen und nach 2 Sekunden soll dann wieder der Titelbildschirm angezeigt werden.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Das erklärst das Anliegen doch viel besser. In dem Fall musst Du sobald "Gewonnen" angezeigt wird einen Timer loslaufen lassen der nach 2 Sekunden die Ausgabe wieder ändert. Siehe: http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_14_007.htm#mj4145d5f8cf91e93d1d41e573c3d11ccc
Wenn ich time.schedule(new Task(), 2000); mache muss ich doch irgendwie auch die Task schreiben. Wie mache ich das?