J'essaie de faire quelque chose en Java et j'ai besoin de quelque chose pour attendre / retarder pendant quelques secondes dans une boucle while.
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
// I need to wait here
ceva[i].setSelected(false);
// I need to wait here
i++;
}
Je veux construire un séquenceur pas à pas et je suis nouveau sur Java. Aucune suggestion?
java
wait
sleep
thread-sleep
ardb
la source
la source
Thread.Sleep()
.Thread.sleep(<milisecondsToSleep>)
. Les
ne doit pas être capitalisé.Réponses:
Si vous voulez faire une pause, utilisez
java.util.concurrent.TimeUnit
:Dormir une seconde ou
Dormir 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 et que vous dormez, vous vous éloignerez un peu de l'exécution, disons, chaque seconde. Si c'est un problème, n'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 a
ScheduledExecutorService
et soitscheduleAtFixedRate
ouscheduleWithFixedDelay
.Par exemple, pour exécuter la méthode
myTask
toutes les secondes (Java 8):Et en Java 7:
la source
TimeUnit.SECONDS.wait(1)
lanceIllegalMonitorStateException
dans Java 8.1 build 31 sur Windows 6.3. Au lieu de cela, je peux l'utiliserThread.sleep(1000)
sans essayer / attraper.Unhandled exception: java.lang.InterruptedExecution
pour lesleep(1)
TimeUnit.SECONDS.sleep(1);
avectry catch
Utilisation
Thread.sleep(1000)
;1000
est le nombre de millisecondes pendant lequel le programme se mettra en pause.la source
Vous devez utiliser l'
Thread.sleep()
appel.Plus d'informations ici: http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
la source
utilisez ceci:
alors vous pouvez appeler cette méthode n'importe où comme:
la source
Utiliser
TimeUnit.SECONDS.sleep(1);
ouThread.sleep(1000);
est une façon acceptable de le faire. Dans les deux cas, vous devez intercepterInterruptedException
ce qui rend votre code volumineux.Il existe une bibliothèque java Open Source appelée MgntUtils (écrite par moi) qui fournit un utilitaire qui traite déjà à l'InterruptedException
intérieur. Donc, votre code ne comprendra qu'une seule ligne:Voir le javadoc ici . Vous pouvez accéder à la bibliothèque depuis Maven Central ou depuis Github . L'article expliquant la bibliothèque se trouve ici
la source
catch (InterruptedException e) { /* empty */ }
n'est PAS une solution sensée ici. À tout le moins, vous devez fournir des informations de journal. Pour plus d'informations sur le sujet, voir javaspecialists.eu/archive/Issue056.htmlUtilisez
Thread.sleep(100);
. L'unité de temps est en millisecondesPar exemple:
la source
Je sais que c'est un très ancien article, mais cela peut aider quelqu'un: vous pouvez créer une méthode, donc chaque fois que vous devez faire une pause, vous pouvez taper
pause(1000)
ou toute autre valeur en millisecondes:Ceci est inséré juste au-dessus de
public static void main(String[] args)
, à l'intérieur de la classe. Ensuite, pour appeler la méthode, tapezpause(ms)
mais remplacezms
par le nombre de millisecondes à mettre en pause. De cette façon, vous n'avez pas à insérer l'intégralité de l'instruction try-catch chaque fois que vous souhaitez faire une pause.la source