J'ai une fonction spécifique que je souhaite exécuter après 5 secondes. Comment puis-je faire cela en Java?
J'ai trouvé javax.swing.timer, mais je ne comprends pas vraiment comment l'utiliser. Il semble que je cherche quelque chose de plus simple que ce que cette classe fournit.
Veuillez ajouter un exemple d'utilisation simple.
Réponses:
ÉDITER:
javadoc dit:
la source
import java.util.Timer; import java.util.TimerTask;
pourrait rendre plus évident que ce n'est pas le casjavax.swing.Timer
. / Remarque, si vous utilisez Swing (et en fait AWT), vous ne devriez rien faire pour changer les composants sur les threads non-Event Dispatch Thread (EDT) (java.util.Timer
tâches mauvaises;javax.swing.Timer
actions bonnes).cancel
méthode du timer à la fin de la méthode run effacerait le thread d'exécution de TimerTasks.Quelque chose comme ça:
Il existe diverses autres méthodes d'usine sur
Executor
lesquelles vous pouvez utiliser à la place, si vous voulez plus de threads dans le pool.Et rappelez-vous, il est important d'arrêter l'exécuteur testamentaire lorsque vous avez terminé. La
shutdown()
méthode arrête proprement le pool de threads lorsque la dernière tâche est terminée et se bloque jusqu'à ce que cela se produise.shutdownNow()
mettra fin au pool de threads immédiatement.la source
Exemple d'utilisation
javax.swing.Timer
Ce code ne sera exécuté qu'une seule fois, et l'exécution se produira dans 3000 ms (3 secondes).
Comme le mentionne camickr, vous devriez chercher " Comment utiliser les minuteries de swing " pour une brève introduction.
la source
Mon code est le suivant:
la source
Comme variante de la réponse @tangens: si vous ne pouvez pas attendre que le garbage collector nettoie votre thread, annulez le minuteur à la fin de votre méthode d'exécution.
la source
Timer t
être déclaréfinal
car on y accède dans une classe interne?Votre question initiale mentionne le "Swing Timer". Si en fait votre question est liée à SWing, alors vous devriez utiliser le Swing Timer et PAS l'util.Timer.
Lisez la section du didacticiel Swing sur « Comment utiliser les minuteries » pour plus d'informations.
la source
vous pouvez utiliser la fonction Thread.Sleep ()
Votre fonction s'exécutera après 4 secondes. Cependant, cela pourrait mettre en pause tout le programme ...
la source
ScheduledThreadPoolExecutor
a cette capacité, mais c'est assez lourd.Timer
a également cette capacité mais ouvre plusieurs threads même s'il n'est utilisé qu'une seule fois.Voici une implémentation simple avec un test (signature proche de Handler.postDelayed () ) d'Android :
Tester:
la source
while
s'agit simplement d'ignorer l'interruption.Tous les autres unswers nécessitent d'exécuter votre code dans un nouveau thread. Dans certains cas d'utilisation simples, vous pouvez simplement attendre un peu et continuer l'exécution dans le même thread / flux.
Le code ci-dessous illustre cette technique. Gardez à l'esprit que cela est similaire à ce que java.util.Timer fait sous le capot mais plus léger.
Implémentation DelayUtil
la source
la source