IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

erreur lors de la saisie clavier avec un scanner


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 15
    Par défaut erreur lors de la saisie clavier avec un scanner
    Bonjour à tous,

    J'apprends JAVA et je cherche à tester les flux IO pour la saisie clavier, lecture écriture dans fichier...
    Je suis sous éclipse.

    Je fais un "systeme de gestion d'adhérent" (extrêment simplifié)

    Mon main commencer par vérifier si il y a déjà un fichier d'annuaire d'adhérents, si il n'est pas présent, il le crée.

    ça, ça fonctionne.

    ensuite, je crée un adhérent. Donc je demande le nom, prenom, profession.
    J'ai cette erreur au moment de la demande du nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Bonjour, bienvenue dans le système de gestion d'abonnés
    Aucun annuaire n'a été trouvé 
    Veuillez entrer un nom pour votre annuaire d'adhérants :
    toto
     
    L'annuaire toto est constitué de 0 adhérants
     
    Création d'un adhérant :
    Entrez le nom de l'adhérant
    java.util.NoSuchElementException: No line found
    L'adhérant a été crée :
    nom=, prenom=, profession=
    L'adhérant a été ajouté à l'annuaire
    	at java.util.Scanner.nextLine(Scanner.java:1540)
    	at Main.main(Main.java:85)


    Et voici la partie de mon main où je crée l'adhérent : (le main complet en dessous si besoin)

    J'avais utilisé au départ un inputstream... mais ça faisait pareil, donc j'ai testé le scanner... je ne vois pas ce qui ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     BufferedReader flux2 = new BufferedReader( 
    new InputStreamReader(System.in));
    Merci de vos conseils...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    		// *****************************************
    		// annuaire rechargé ou nouveau crée
     
    		System.out.println("\n\n\n");
     
     
    		// création du flux de lecture
     
    		/*
    		 * BufferedReader flux2 = new BufferedReader( new
    		 * InputStreamReader(System.in));
    		 */
    String nom="", prenom="", profession="";
     
    		try {
    		Scanner sc = new Scanner(System.in);
     
    		// récupération des infos de l'adhérent
    		System.out.println("Création d'un adhérant :");
     
    		System.out.println("Entrez le nom de l'adhérant");
    nom = sc.nextLine();
     
    		System.out.println("Entrez le prénom de l'adhérant");
    prenom = sc.nextLine();
     
    		System.out.println("Entrez la profession de l'adhérant");
    profession = sc.nextLine();
     
    sc.close();
    		}
    catch (NoSuchElementException e){
    	e.printStackTrace();
    }
     
    		// création de l'adhérant
     
    		Adherant adh = new Adherant(nom, prenom, profession);
     
     
    		System.out.println("L'adhérant a été crée :");
    		System.out.println(adh);
     
    		annuaire.addAdherant(adh);
    System.out.println("L'adhérant a été ajouté à l'annuaire");
     
    	}



    le main complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    import java.io.*;
    import java.util.*;
     
    public class Main {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		// ***************************************************************
    		// Démarrage - verification de la présence d'un annuaire enregistré ou
    		// création
    		System.out.println("Bonjour, bienvenue dans le système de gestion d'abonnés");
     
    		// Lecture du fichier annuaire si il existe
     
    		// création du flux en dehors du try
     
    		ObjectInputStream ois = null;
    		AnnuaireAdherants annuaire = null;
     
    		try {
     
    			ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("annuaire.dat"))));
     
    			annuaire = (AnnuaireAdherants) ois.readObject();
    			ois.close();
    		}
     
    		catch (FileNotFoundException e) {
    			// cette exception se déclenche si le fichier n'a pas été trouvé,
    			// donc si c'est la première fois. Il faut donc créer un annuaire
    			try {
     
    				// création du lecteur
    				InputStreamReader lecteur = new InputStreamReader(System.in);
     
    				// création du flux d'entrée
    				BufferedReader flux = new BufferedReader(lecteur);
     
    				String nom;
    				// Interrogation
    				System.out.println(
    						"Aucun annuaire n'a été trouvé \nVeuillez entrer un nom pour votre annuaire d'adhérants :");
     
    				nom = flux.readLine();
     
    				flux.close();
     
    				annuaire = new AnnuaireAdherants(nom);
     
    				// SauvegardeAnnuaire.sauvegarderAnnuaire(annuaire);
     
    			} catch (IOException e2) {
    				e2.printStackTrace();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		System.out.println("\n\n");
    		System.out.println(annuaire);
     
    		// *****************************************
    		// annuaire rechargé ou nouveau crée
     
    		System.out.println("\n\n\n");
     
     
    		// création du flux de lecture
     
    		/*
    		 * BufferedReader flux2 = new BufferedReader( new
    		 * InputStreamReader(System.in));
    		 */
    String nom="", prenom="", profession="";
     
    		try {
    		Scanner sc = new Scanner(System.in);
     
    		// récupération des infos de l'adhérent
    		System.out.println("Création d'un adhérant :");
     
    		System.out.println("Entrez le nom de l'adhérant");
    nom = sc.nextLine();
     
    		System.out.println("Entrez le prénom de l'adhérant");
    prenom = sc.nextLine();
     
    		System.out.println("Entrez la profession de l'adhérant");
    profession = sc.nextLine();
     
    sc.close();
    		}
    catch (NoSuchElementException e){
    	e.printStackTrace();
    }
     
    		// création de l'adhérant
     
    		Adherant adh = new Adherant(nom, prenom, profession);
     
     
    		System.out.println("L'adhérant a été crée :");
    		System.out.println(adh);
     
    		annuaire.addAdherant(adh);
    System.out.println("L'adhérant a été ajouté à l'annuaire");
     
    	}
     
    }

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 15
    Par défaut Précision : ça ne se produit que si il n'y avait pas d'annuaire (donc de fichier) de sauvegarde...
    Si il y a déjà un annuaire existant (donc à partir de la deuxième fois), il n'y a plus de problème...

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 15
    Par défaut C'est lié au InputStreamReader lecteur = new InputStreamReader(System.in); précédent
    C'est la conséquence, à priori, du

    InputStreamReader lecteur = new InputStreamReader(System.in);

    qui est lancé avant ... mais je ne vois pas pourquoi... est-ce que je ne l'ai pas fermé correctement... ou un truc du genre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    	try {
     
    				// création du lecteur
    				InputStreamReader lecteur = new InputStreamReader(System.in);
     
    				// création du flux d'entrée
    				BufferedReader flux = new BufferedReader(lecteur);
     
    				String nom;
    				// Interrogation
    				System.out.println(
    						"Aucun annuaire n'a été trouvé \nVeuillez entrer un nom pour votre annuaire d'adhérants :");
     
    				nom = flux.readLine();
     
     
    			annuaire = new AnnuaireAdherants("nom");
     
    				// SauvegardeAnnuaire.sauvegarderAnnuaire(annuaire);
     
    			} catch (IOException e2) {
    				e2.printStackTrace();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		finally {
    			flux.close();
    			lecteur.close();
    		}
    		System.out.println("\n\n");
    		System.out.println(annuaire);
     
    		// *****************************************
    		// annuaire rechargé ou nouveau crée
     
    		System.out.println("\n\n\n");
     
    		// création du flux de lecture
     
    		/*
    		 * BufferedReader flux2 = new BufferedReader( new
    		 * InputStreamReader(System.in));
    		 */
     
    		String nom = "", prenom = "", profession = "";
     
    		try {
    			Scanner sc = new Scanner(System.in);
     
    			// récupération des infos de l'adhérent
    			System.out.println("Création d'un adhérant :");
     
    			System.out.println("Entrez le nom de l'adhérant");
    			nom = sc.nextLine();
     
    			System.out.println("Entrez le prénom de l'adhérant");
    			prenom = sc.nextLine();
     
    			System.out.println("Entrez la profession de l'adhérant");
    			profession = sc.nextLine();
    			// création de l'adhérant
     
    			Adherant adh = new Adherant(nom, prenom, profession);
     
    			System.out.println("L'adhérant a été crée :");
    			System.out.println(adh);
    			annuaire.addAdherant(adh);
    			System.out.println("L'adhérant a été ajouté à l'annuaire");
     
    			sc.close();
    		} catch (NoSuchElementException e) {
    			e.printStackTrace();
    		}
     
     
    		System.out.println(annuaire.toString());
     
    		// SauvegardeAnnuaire.sauvegarderAnnuaire(annuaire);
    	}
     
    }

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est surtout parce que tu l'as fermé.

    Fermer un flux ça veut dire que tu peux plus le lire. Ça veut pas dire autre chose.

    Du coup quand tu crées des Reader ou des Scanner sur System.in et que tu les fermes ensuite, tu fermes l'entrée qui sert à la saisie clavier. Et il n'est plus possible d'en lire.

    Pour résoudre le problème :

    • Il faut que tu choisisses : soit tu lis la saisie clavier avec un BufferedReader, soit avec un Scanner. Pour la totalité de ton programme. Je conseille Scanner.
    • Que ce soit BufferedReader ou Scanner, tu en crées un seul, au début du programme, et tu utilises ce seul et unique objet partout où ton programme a besoin de lire des saisies clavier. Pas plus d'un objet qui lit sur System.in.
    • Pas vraiment besoin de le fermer, pas plus que tu as besoin de fermer System.in puisque c'est pas toi qui l'a ouvert. C'est à Java de gérer ça quand le programme se ferme. Mais si tu veux le fermer quand même, fais-le à la fin de ton programme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 15
    Par défaut
    Salut Thelvin,

    Ok, je comprends mieux. Je pensais qu'il fallait ouvrir et fermer à chaque fois.

    Je te remercie, ça marche nickel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/04/2008, 17h14
  2. Réponses: 1
    Dernier message: 29/02/2008, 11h48
  3. [Configuration] Erreur lors d'envoie de mail avec PHP
    Par ostie127 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/02/2008, 18h35
  4. Réponses: 11
    Dernier message: 09/08/2007, 14h27
  5. afficher un message d'erreur lors d'une saisie
    Par ludovicparis dans le forum IHM
    Réponses: 4
    Dernier message: 20/03/2007, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo