Comment prendre un certain temps à s'exécuter jusqu'à ce scanner obtenir l'entrée?
Je suis en train d'écrire une boucle qui s'exécute jusqu'à ce que je tape un texte spécifique dans la console lorsque l'application est en cours d'exécution. Quelque chose comme:
while (true) {
try {
System.out.println("Waiting for input...");
Thread.currentThread();
Thread.sleep(2000);
if (input_is_equal_to_STOP){ //if user type STOP in terminal
break;
}
} catch (InterruptedException ie) {
//If this thread was intrrupted by nother thread
}}
Et je veux écrire une ligne à chaque fois qu'il passe à travers donc je ne veux pas arrêter dans le temps, et d'attendre la prochaine entrée. Ai-je besoin d'utiliser plusieurs threads pour cela?
Si je crée un nouveau scanner à l'intérieur de la boucle de l'application s'arrête juste et d'attente pour l'entrée et ne pas continuellement.
Votre appel à
Votre appel à
Thread.currentThread();
ne fait rien. Just sayin'.OriginalL'auteur Xenovoyance | 2011-03-28
Vous devez vous connecter pour publier un commentaire.
Oui.
Depuis à l'aide d'un
Scanner
surSystem.in
implique que vous êtes en train de faire le blocage de IO, un thread devra être dédié à la tâche de lecture de la saisie de l'utilisateur.Voici un exemple de base pour commencer (je vous encourage à le regarder dans les
java.util.concurrent
paquet pour faire ce genre de choses.):Pas de problème.....
Je ne suis pas sûr que c'est 100% exact de dire
Scanner
blocs, car cela donne l'impression queScanner
est capable de bloquer. Seulement les choses quiScanner
wraps sont capables de bloquer l'. Parce queSystem.in
blocs, etScanner
enveloppementsSystem.in
, les appels àScanner.readXYZ()
bloc, mais seulement sous le capot. Je ne dis pas que ce que vous avez à faire est mal, je dis juste qu'il peut être interprété comme signifiant quelque chose qui n'est pas vrai.Ouais.. j'ai réalisé que trop.. ne Pouvait pas trouver une meilleure formulation. Hésitez pas à reformuler si vous avez une meilleure suggestion 😛
Aussi, je voudrais ajouter une
break
à votreInterruptedException
afin de ne pas obtenir immédiatement unRunning Loop...
après l'appel de votret.interrupt();
Encore un +1 pour une excellente illustration.OriginalL'auteur aioobe
Oui, vous avez besoin de deux fils pour cela. Le premier pourrait faire quelque chose comme ceci:
Et les autres:
OriginalL'auteur Mark Peters