So erstellen Sie eine Verzögerung in Schwung
Machte ich ein blackjack-Spiel, und ich will, dass die AI-Spieler zu pause zwischen der Einnahme von Karten. Ich habe versucht einfach mit Thread.sleep(x), aber das macht es einfrieren, bis die KI-Spieler nimmt alle seine Karten. Ich weiß, dass Swing nicht thread-sicher, so sah ich im Timer, aber ich konnte nicht verstehen, wie ich verwenden könnte, für diese. Hier ist meine aktuelle code:
while (JB.total < 21) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println("Oh noes!");
}
switch (getJBTable(JB.total, JB.aces > 0)) {
case 0:
JB.hit();
break;
case 1:
break done;
case 2:
JB.hit();
JB.bet *= 2;
break done;
}
}
BTW, die hit(); Methode aktualisiert die GUI.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, der folgende code zeigt ein JFrame mit JTextArea und ein JButton. Wenn auf die Schaltflächen geklickt wird, wird der Timer senden das Ereignis wiederholt (mit einer Sekunde Verzögerung zwischen Ihnen), um die actionListener im Zusammenhang mit der-Taste, die hängt eine Zeile mit der aktuellen Zeit.
Gut, dieser code ist ein Beispiel, wie Sie mit javax.Schluck.Timer-Objekte. In Bezug auf den speziellen Fall der Frage. Die if-Anweisung, um den timer zu stoppen, ändern müssen, und, natürlich, die Aktionen der actionPerformed. Das folgende fragment ist ein Skelett von der Lösung actionPerformed:
IMHO das problem dadurch behoben wird, jetzt @user920769 müssen überlegen, wo setzen Sie die actionListener und die Start/Stopp-Bedingungen...
@kleopatra: Danke für zeigen mir die Existenz dieser timer-Klasse, ich weiß nicht, nichts über es und es ist erstaunlich, machen es möglich, eine Menge von der Aufgabe betraut, die Dinge in einer swing-Applikation 🙂
Den Timer ist die Lösung, denn wie Sie sagen, Sie sind die Aktualisierung der GUI, die getan werden sollte, auf der EDT.
Ich bin mir nicht sicher, was Ihr Anliegen ist. Sie befassen sich eine Karte und starten Sie den Timer. Wenn der Timer feuert Sie beschließen, eine andere Karte zu nehmen oder zu halten. Wenn Sie halten Ihr wird der Timer angehalten.
Gut, eine kurze Erklärung über Timer.
Erste von allen, benötigen Sie eine java.util.Timer-variable in der Klasse und eine andere Klasse in Ihrem Projekt, die sich von java.util.TimerTask (nennen wir es mal Tasker).
Die Initialisierung des Timer-variable ist so einfach:
Nun die Tasker-Klasse:
Schließlich, die installation der timer mit den zugehörigen Tasker:
Die Zeitplan-Funktion zeigt Folgendes an:
Fisrt param: Aktion zu tun, jeder Zeitraum in Millisekunden (Führt die run-Funktion eines TimerTask-Klasse oder deren Verlängerung)
Zweite param: Wenn der timer starten soll. In diesem Fall, es beginnt, wenn die Zeitplan-Funktion aufgerufen wird. Das folgende Beispiel zeigt eine Start-1 Sekunde nach dem Aufruf der Funktion Zeitplan:
timer.schedule(new Tasker(),1000,period);
Drittens param: Millisekunden zwischen ein Anruf von Tasker.die Funktion run() und dem folgenden Aufruf.
Ich hoffe, Sie verstehen diese microtutorial :). Wenn Sie irgendein problem haben, Fragen Sie für weitere detaillierte Informationen!
Freundlichen GRÜßEN!
javax.swing.Timer
? Kann ich nicht sagen, ich habe festgestellt das andere.Ich denke, dass in dieses tutorial ist klar, wie zu verwenden Timer, um zu erreichen, was Sie wollen, ohne sich mit Threads.