Ich will einen Timer in der if-Abfrage runterzählen lassen, nachdem dieser dann runtergezählt hat soll der Rest der if-Abfrage fortgesetzt werden.
Die if-Abfrage soll mehrmals aufrufbar sein, also immer mit der gleichen Timerzeit starten.
Du muss einen Thread/Timer was auch immer starten in der if, etwas was den Hauptthread weiterlaufen lässt. Dieser Thread zählt runter und wenn er 0 erreicht hat führt er deinen Rest aus und beendet sich selbst
Also da Du den Thread anhalten willst (er soll ja warten, bis die Zeit rum ist und dann weiter machen), dürfte Thread.sleep hier durchaus das Mittel der Wahl sein.
Da du es aber mehrfach "aufrufen" willst, wirst du hier wohl mehrere Threads haben.
Das Ganze gibt es dann aber auch schon relativ vorgefertigt in mehreren Klassen. Die meisten UI Frameworks haben entsprechende Implementierungen, in denen dann ein Timer dafür sorgt, dass zu gewissen Zeiten etwas auf dem UI Thread ausgeführt wird (z.B. javax.swing.Timer, https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html) aber es gibt natürlich auch im core Java einen Timer: java.util.Timer.
Wichtig ist: Da verwendest du dann (speziell bei den Lösungen der UI Frameworks) kein sleep mehr!
publicclassTimerTaskDemoextendsTimerTask{privateint id;publicTimerTaskDemo(int id){this.id = id;}@Overridepublicvoidrun(){System.out.println("Rückmeldung von Task "+ id);}publicstaticvoidmain(String... args){System.out.println("Diese Demo startet 10 Tasks, welche alls nach x Sekunden ausgeführt werden.");Timer timer =newTimer();Random r =newRandom();for(int i =0; i <10; i++){int s = r.nextInt(10)+1;System.out.println("Der Task "+ i +" wird sich nach "+ s +" Sekunden zurückmelden...");
timer.schedule(newTimerTaskDemo(i), s *1000);}}}
Danke für die Infos, hat mir geholfen.
Es ging nicht ein Code Snippet zu posten, da ich versuche ein Minecraft Mod zu erstellen, es war also alles ziemlich zusammenhängend.
Das ist auch der Grund, warum ich nicht Sleep() benutzen konnte, weil sonst ja alles für ein paar Sekunden einfriert.