Classe Scanner qui bug
J'ai une méthode run dans laquelle j'ai :
Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir un nombre :");
int str = sc.nextInt();
System.out.println("Vous avez saisi le nombre : " + str);
Quand j'arrive à Veuillez saisir un nombre :, je saisis un nombre mais çà ne passe pas à l'étape suivante c'est à dire Vous avez saisi le nombre :...
Je boucle en saisissant des données...
Que faire ? Je suis vraiment perdu !
Merci pour votre aide !
2 réponses
Un blocage survient lors de la saisie d'un nombre avec Scanner dans une méthode run, et l'affichage de « Vous avez saisi le nombre : ... » n'est jamais atteint, limitant le flux du programme. Plusieurs pistes sont évoquées, notamment l'interaction avec un fichier Fractal qui utilise Java et pourrait bloquer System.in/out, la possibilité d'appeler main depuis une autre méthode et le comportement des Threads. Des solutions pratiques proposées comprennent l'utilisation d'un seul Scanner sur System.in, son bloc synchronized, et la vérification de la gestion des entrées/sorties par Fractal pour éviter les blocages. En cas d'exécution en multithreading, tester avec un seul objet Scanner et isoler le code sans le fichier Fractal peut aider à identifier l'origine du blocage.
-
ModérateurLe code est complet ou il y a autre chose ?
Que donne l'affichage suivant :System.out.println(System.in); System.out.println(sc);
-
Bonsoir,
Merci de m'aider !
Voici le code complet de la méthode appelée :
public void run() { System.out.println("Bienvenue dans l'Application"); Scanner sc = new Scanner(System.in); System.out.println("Veuillez saisir un nombre :"); int str = sc.nextInt(); System.out.println("Vous avez saisi le nombre : " + str); }-
Sinon avant exécution voici le résultat des System.out.println(System.in) et sc :
[java] java.io.BufferedInputStream@649a8a68
[java] java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\ ][decimal separator=\,][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Qâ^z\E] -
-
ModérateurC'est le run de la classe Thread ?
Si tu lances plusieurs Thread en même temps je comprendrais que ça bug. Il faut que tu essayes avec un seul objet Scanner sur le clavier en mettant un bloc de synchronisation
private static final Scanner sc = new Scanner(System.in); public void run() { System.out.println("Bienvenue dans l'Application"); synchronized(sc) { System.out.print("Veuillez saisir un nombre : "); int str = sc.nextInt(); System.out.println("Vous avez saisi le nombre : " + str); } } -
-
-