L'ajout d'un retard dans les programmes
Je veux ajouter un retard dans mon programme à l'aide de la Thread.sleep(1000)
de commande (ce qui en fait l'arrêt pendant 1 seconde avant de continuer), mais cela signifie que j'ai aussi besoin d'ajouter la throws InterruptedException
. Cependant, je ne sais pas où le mettre.
Mon code ressemble fondamentalement à ce droit maintenant:
public static void main(String[] args) {
Clock myClock = new Clock; //new clock object.
while (true) {
myClock.tick();
}
}
Mon autre classe:
public class Clock {
//.. some constructors and stuff
public void tick() {
secondHand.draw(); //redraws the second hand to update every second
}
//.. some more methods and stuff
}
Je veux appeler l' tick()
méthode toutes les 1 seconde, mais je ne sais pas où je peux mettre le Thread.sleep
et throws InterruptedException
consolidés. Toute aide serait appréciée. Également des commentaires sur d'autres façons que je peux faire mon horloge et/ou de mise à jour serait utile aussi!
- Si vous êtes en cours d'exécution dans un environnement graphique comme Swing, utiliser un
javax.swing.Timer
comme je l'ai démontré dans votre question précédente Comment puis-je faire une horloge? - vous êtes juste m'aider avec toutes sortes de questions aujourd'hui! Merci! Je travaille avec un StdDraw de la bibliothèque de l'StdLib.jar fichier trouvé ici (je ne suis qu'un humble collège CS étudiant)
- Par ailleurs, si vous faites une pause pendant une heure et il a peu de retard car vous ne comptez pas de cpu passé du temps dans le code précédent.
- Nous sommes tous les élèves ;). Attention tout de même, vous êtes toujours en cours d'exécution avec le Swing de l'environnement, aucune longues ou bloquer les processus va vous amener le programme à l'air de hung/s'est écrasé. Si vous voulez utiliser quelque chose comme
Thread.sleep
vous êtes mieux d'utiliser un thread séparé. Cela signifie que vous devenez responsable pour re-synchroniser les mises à jour de l'INTERFACE utilisateur de retour dans le Événement d'Envoi Thread. Je ne veux pas de votre prochaine question, "Pourquoi est-ce que mon programme se bloque?" 😉
Vous devez vous connecter pour publier un commentaire.
Après l'appel à
tick()
, mettre un sommeil sur le thread en cours comme suit:currentThread
,Thread.sleep(...)
fera la même chose. Juste nit la cueillette 😉Vous pouvez utiliser soit
javax.swing.Timer
oujava.util.Timer
pour obtenir les mêmes résultats.La
javax.swing.Timer
a l'avantage de lorsqu'il est déclenché, leActionPerformed
méthode est exécutée au sein de l'Événement Expédition de Fil, ce qui rend les mises à jour de l'INTERFACE utilisateur plus facile.java.util.Minuterie
javax.swing.Minuterie
Vous pouvez avoir lu Comment Utiliser Swing Minuteries pour plus d'info sur
javax.swing.Timer
Selon le débit de votre programme, vous aurez envie de mettre la
Thread.sleep(1000);
déclaration dans votre contrôle de logic. Par cela, je veux dire que, quelle que soit la logique des appels de votretick()
de la méthode, par convention, être le meilleur endroit pour présenter votre logique de contrôle - dans ce cas, votreThread.sleep(1000);
déclaration.Hélas votre appel de la logique devrait ressembler à quelque chose comme ceci:
Cette approche garantit que si vous avez d'autres le contrôle de la logique de l'accès à vos
tick()
méthode, puis il ne sera pas liée à l'1 seconde de retard. Différents clients ont des besoins différents...Je préfère renvoyer l'ensemble de la boucle while dans le bloc try catch pour l'évolutivité de la sécurité de la lisibilité... Par cela, je veux dire la si la logique en vous
tick()
méthode devient de plus en plus complexe et vous vous retrouvez jeter davantage d'exceptions, alors vous pouvez simplement ajouter la clause catch à l'un bloc try catch comme suit:Bien que je ne serait pas normalement les suggérer.
Dans ce cas, vous n'avez pas vraiment besoin de code pour cette interruption.
Cacher en les enveloppant avec une exception d'exécution.
Très Simple en java