J'essaie de faire quelque chose dans Java et j'ai besoin de quelque chose pour attendre/retarder une quantité de 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 en Java. Aucune suggestion?
Si vous voulez faire une pause, utilisez Java.util.concurrent.TimeUnit
:
TimeUnit.SECONDS.sleep(1);
Dormir une seconde ou
TimeUnit.MINUTES.sleep(1);
Dormir une minute.
Comme il s’agit d’une boucle, cela pose un problème inhérent - la dérive. Chaque fois que vous exécutez du code, puis que vous dormez, vous vous écartez un peu, par exemple, chaque seconde. S'il s'agit d'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 toutes les secondes, je voudrais fortement == recommander un ScheduledExecutorService
et soit scheduleAtFixedRate
ou - scheduleWithFixedDelay
.
Par exemple, pour exécuter la méthode myTask
chaque seconde (Java 8):
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
Et dans Java 7:
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
myTask();
}
}, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
Utilisez Thread.sleep(1000)
;
1000
est le nombre de millisecondes pendant lequel le programme s'interrompt.
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
Vous devez utiliser l'appel Thread.sleep()
.
Plus d'infos ici: http://docs.Oracle.com/javase/tutorial/essential/concurrency/sleep.html
Utilisez Thread.sleep(100);
. L'unité de temps est la milliseconde
Par exemple:
public class SleepMessages {
public static void main(String args[])
throws InterruptedException {
String importantInfo[] = {
"Mares eat oats",
"Does eat oats",
"Little lambs eat ivy",
"A kid will eat ivy too"
};
for (int i = 0;
i < importantInfo.length;
i++) {
//Pause for 4 seconds
Thread.sleep(4000);
//Print a message
System.out.println(importantInfo[i]);
}
}
}
Je sais que c'est un article très ancien, mais cela peut aider quelqu'un: vous pouvez créer une méthode. Ainsi, chaque fois que vous devez faire une pause, vous pouvez taper pause(1000)
ou toute autre valeur en millisecondes:
public static void pause(int ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
System.err.format("IOException: %s%n", e);
}
}
Ceci est inséré juste au-dessus de public static void main(String[] args)
, à l'intérieur de la classe. Ensuite, pour faire appel à la méthode, tapez pause(ms)
mais remplacez ms
par le nombre de millisecondes à suspendre. De cette façon, vous n'avez pas besoin d'insérer l'instruction try-catch dans son intégralité chaque fois que vous souhaitez faire une pause.
Utiliser TimeUnit.SECONDS.sleep(1);
ou Thread.sleep(1000);
est un moyen acceptable de le faire. Dans les deux cas, vous devez attraper InterruptedException
qui rend votre code volumineux. Il existe une bibliothèque Open Source Java appelée MgntUtils (écrite par moi) qui fournit un utilitaire qui gère déjà InterruptedException
inside. Donc, votre code ne comprendrait qu'une seule ligne:
TimeUtils.sleepFor(1, TimeUnit.SECONDS);
Voir le javadoc ici . Vous pouvez accéder à la bibliothèque depuis Maven Central ou depuis Github . L'article expliquant la bibliothèque pourrait être trouvé ici
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
try{Thread.sleep(time_in_milliseconds);}catch(InterruptedException ie){}
ceva[i].setSelected(false);
try{Thread.sleep(1000);}catch(InterruptedException ie){}
i++;
}
1 seconde correspond à 1000 millisecondes.
utilisez ceci:
public static void wait(int ms){
try
{
Thread.sleep(ms);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
alors vous pouvez appeler cette méthode n'importe où comme:
wait(1000);