Ich habe eine bestimmte Funktion, die ich nach 5 Sekunden ausführen möchte. Wie kann ich das in Java machen?
Ich habe javax.swing.timer gefunden, kann aber nicht wirklich verstehen, wie man es benutzt. Es sieht so aus, als würde ich nach etwas suchen, das viel einfacher ist als diese Klasse.
Bitte fügen Sie ein einfaches Anwendungsbeispiel hinzu.
Antworten:
BEARBEITEN:
Javadoc sagt:
quelle
import java.util.Timer; import java.util.TimerTask;
könnte es offensichtlicher machen, dass dies nicht istjavax.swing.Timer
. / Hinweis: Wenn Sie Swing (und tatsächlich AWT) verwenden, sollten Sie nichts tun, um Komponenten in EDT-Threads (Non-Event Dispatch Thread) zu ändern (java.util.Timer
Aufgaben schlecht;javax.swing.Timer
Aktionen gut).cancel
Methode am Ende der Ausführungsmethode den Ausführungsthread der TimerTasks löschen.Etwas wie das:
Es gibt verschiedene andere Factory-Methoden,
Executor
die Sie stattdessen verwenden können, wenn Sie mehr Threads im Pool wünschen.Und denken Sie daran, es ist wichtig, den Executor herunterzufahren, wenn Sie fertig sind. Die
shutdown()
Methode fährt den Thread-Pool nach Abschluss der letzten Aufgabe sauber herunter und blockiert ihn, bis dies geschieht.shutdownNow()
beendet den Thread-Pool sofort.quelle
Anwendungsbeispiel
javax.swing.Timer
Dieser Code wird nur einmal ausgeführt und erfolgt in 3000 ms (3 Sekunden).
Wie camickr erwähnt, sollten Sie für eine kurze Einführung nach "Verwendung von Swing-Timern " suchen .
quelle
Mein Code lautet wie folgt:
quelle
Als Variation von @tangens Antwort: Wenn Sie nicht warten können, bis der Garbage Collector Ihren Thread bereinigt, brechen Sie den Timer am Ende Ihrer Ausführungsmethode ab.
quelle
Timer t
deklariert werden,final
da innerhalb einer inneren Klasse darauf zugegriffen wird?Ihre ursprüngliche Frage erwähnt den "Swing Timer". Wenn Ihre Frage tatsächlich mit SWing zusammenhängt, sollten Sie den Swing-Timer und NICHT den util.Timer verwenden.
Weitere Informationen finden Sie im Abschnitt aus dem Swing-Tutorial zum Thema " Verwenden von Timern ".
quelle
Sie können die Thread.Sleep () -Funktion verwenden
Ihre Funktion wird nach 4 Sekunden ausgeführt. Dies kann jedoch das gesamte Programm anhalten ...
quelle
ScheduledThreadPoolExecutor
hat diese Fähigkeit, aber es ist ziemlich schwer.Timer
hat auch diese Fähigkeit, öffnet aber mehrere Threads, auch wenn sie nur einmal verwendet werden.Hier ist eine einfache Implementierung mit einem Test (Signatur in der Nähe von Handler.postDelayed () von Android ):
Prüfung:
quelle
while
ist nur um Unterbrechung zu ignorieren.Alle anderen Antworten müssen Ihren Code in einem neuen Thread ausführen. In einigen einfachen Anwendungsfällen möchten Sie möglicherweise nur ein wenig warten und die Ausführung innerhalb desselben Threads / Flusses fortsetzen.
Der folgende Code demonstriert diese Technik. Denken Sie daran, dass dies ähnlich ist wie java.util.Timer unter der Haube, aber leichter.
DelayUtil-Implementierung
quelle
quelle