J'ai essayé de retarder - ou de mettre en veille - mon programme Java, mais une erreur se produit.
Je ne peux pas utiliser Thread.sleep(x)
ou wait()
. Le même message d'erreur apparaît:
exception non signalée java.lang.InterruptedException; doit être attrapé ou déclaré jeté.
Y a-t-il une étape requise avant d'utiliser les méthodes Thread.sleep()
ou wait()
?
Réponses:
Vous avez beaucoup de lecture devant vous. Des erreurs du compilateur à la gestion des exceptions, au filetage et aux interruptions de fil. Mais cela fera ce que vous voulez:
la source
Comme d'autres utilisateurs l'ont dit, vous devez entourer votre appel d'un
try{...} catch{...}
bloc. Mais depuis la sortie de Java 1.5, il existe une classe TimeUnit qui fait la même chose que Thread.sleep (millis) mais est plus pratique. Vous pouvez choisir l'unité de temps pour l'opération de sommeil.Il a également des méthodes supplémentaires: TimeUnit Oracle Documentation
la source
try-catch
gestion des exceptions requise .Jetez un oeil à cet excellent bref article sur la façon de le faire correctement.
Essentiellement: attrapez le
InterruptedException
. N'oubliez pas que vous devez ajouter ce bloc catch. La publication explique cela un peu plus loin.la source
Utilisez la construction de codage suivante pour gérer les exceptions
la source
Mettez votre
Thread.sleep
bloc de capture d'essaila source
Lors de l'utilisation d' Android (la seule fois où j'utilise Java), je recommanderais d'utiliser un gestionnaire au lieu de mettre le fil en veille.
Référence: http://developer.android.com/reference/android/os/Handler.html
la source
Essaye ça:
la source
Exception
en Java?Mes façons d'ajouter du retard à un programme Java.
C'est pour le délai séquentiel mais pour les délais de boucle, référez-vous à Java Delay / Wait .
la source
par exemple:-
la source
Une manière plus simple d'attendre est d'utiliser
System.currentTimeMillis()
, qui renvoie le nombre de millisecondes depuis minuit le 1er janvier 1970 UTC. Par exemple, pour attendre 5 secondes:De cette façon, vous n'avez pas à vous occuper des threads et des exceptions. J'espère que cela t'aides!
la source
Utilisation
java.util.concurrent.TimeUnit
:Dormez une seconde ou
Dormez une minute.
Comme il s'agit d'une boucle, cela présente un problème inhérent - la dérive. Chaque fois que vous exécutez du code, puis que vous dormez, vous vous éloignerez un peu de l'exécution, par exemple, chaque seconde. Si c'est un problème, ne l'utilisez pas
sleep
.De plus,
sleep
n'est pas très flexible en matière de contrôle.Pour exécuter une tâche toutes les secondes ou avec un retard d'une seconde, je recommande fortement un [
ScheduledExecutorService
] [1] et soit [scheduleAtFixedRate
] [2] ou [scheduleWithFixedDelay
] [3].Pour exécuter la méthode
myTask
toutes les secondes (Java 8):la source
Thread.sleep()
est simple pour les débutants et peut convenir aux tests unitaires et aux preuves de concept.Mais s'il vous plaît NE PAS utiliser
sleep()
pour le code de production. Finalementsleep()
Peut vous mordre gravement.Meilleure pratique pour les applications Java multithread / multicœurs pour utiliser le concept "thread wait". Wait libère tous les verrous et moniteurs détenus par le thread, ce qui permet aux autres threads d'acquérir ces moniteurs et de continuer pendant que votre thread dort paisiblement.
Le code ci-dessous montre cette technique:
DelayUtil
la mise en oeuvre:la source
Alternativement, si vous ne souhaitez pas traiter les threads, essayez cette méthode:
Il commence lorsque vous l'appelez et se termine lorsque le nombre de secondes s'est écoulé.
la source