Bonjour,
Je suis présentement étudiant et je programme à temps perdu. J'ai débuté sous-peu le java après plusieurs années de modélisation et je fais face régulièrement à plusieurs difficultés. Sauf qu'habituellement, je suis capable de régler ceux-ci moi-même...
Voilà, pardon si le sujet a déjà été posté, j'ai beaucoup de difficulté à faire le lien être divers projets pour l'instant.
Dans la livre d'Anne Tasso: Le livre de Java premier langage 5e édition, il y a un projet de classification d'étudiants. Seulement, ils expliquent la notion d'archivage dans un fichier .DAT pour les objets... Lorsque je met en pratique cette ''mise en donnée'', ça plante. Je ''catch'' un IOException à la lecture de celui-ci et lorsque j'écris dans le fichier en question, j'obtient un Exception in thread "main" java.lang.NullPointerException étant donné que ''return'' un ''null''. Voilà le code pour vous imagé la situation.
Voici le code de gestion, celui qui s'exécute :
Voici la classe Fichier, où je communique l'archivage :
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 package firstpackage; import java.util.*; import java.io.*; public class GestionClasse { public static void main(String [] argument) throws IOException, ClassNotFoundException { byte choix = 0; Scanner sc = new Scanner(System.in); Classe C = new Classe(); Fichier F = new Fichier(); if(F.ouvrir("Lecture")) { C = F.lecture(); F.fermer(); } do { System.out.println("1. Ajouter un etudiant"); System.out.println("2. Afficher la classe"); System.out.println("3. Supprimer un etudiant"); System.out.println("4. Rechercher un etudiant"); System.out.println("5. Sortir"); choix = sc.nextByte(); switch(choix) {
Et finalement, le début de la classe Classe :
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 package firstpackage; import java.io.*; // Pour la gestion de fichiers public class Fichier { private ObjectOutputStream ofW; private ObjectInputStream ofR; private char mode; private String nomDeFichier = "Classe.dat"; public boolean ouvrir(String s) // (fichier, le mode) { try { mode = (s.toUpperCase()).charAt(0); // Premiere lettre du mode s if(mode == 'R' || mode == 'L')// Ouverture de lecture ofR = new ObjectInputStream(new FileInputStream(new File(nomDeFichier))); else if (mode == 'W' || mode == 'E')// Ouverture d'ecriture ofW = new ObjectOutputStream(new FileOutputStream(new File(nomDeFichier))); return true; } catch (IOException e) { return false; } } public void ecriture(Classe tmp) { try { if(tmp != null) ofW.writeObject(tmp); } catch (IOException e){ } } public Classe lecture() { try { Classe tmp = (Classe) ofR.readObject(); return tmp; } catch (IOException e){ System.out.println("Erreur de lecture?"); } catch (ClassNotFoundException e){ } return null; } public void fermer() throws IOException { if(mode == 'E' || mode == 'W') ofW.close(); else if(mode =='L' || mode == 'R') ofR.close(); } }
Selon mon pif, l'erreur est à la ligne 36 de la classe Fichier. Ce qui explique que la première instruction que mon programme applique est : Erreur de lecture?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 package firstpackage; import java.util.*; import java.io.*; public class Classe implements Serializable { private HashMap<String, Etudiant> liste; // Liste dynamique Scanner sc = new Scanner(System.in); public Classe() // Initiation de la liste dynamique { liste = new HashMap<String, Etudiant>(); // <> mode generique!
Merci énormément de votre lecture, compréhension et surtout de votre aide!
Amicalement,
Kevin Sheehy
Partager