Bonjour à tous,
J'ai transposé ce que j'avais fait sur un autre exercice... cela marchait mais là j'ai une erreure.
2 classes : Batiment et Module (un batiment contient des modules)
1 classe Main
1 classe charger
1 classe sauvegarder
Le problème c'est qu'au chargement, normalement, je devrais retrouver mon batiment à la fin du chargement. Ici, il retourne "none".
Je n'arrive pas à voir si c'est une pb d'écriture de la sauvegarde, un pb de lecture (sachant qu'il me lancer une EOFException (j'avais pas eu avant... est ce parce qu'il ne trouve pas la fin de l'objet et continue à lire)
bref, voici mes classes et les erreurs si vous pouvez jeter un oeil...
L'erreur si je retire dans charger la catche (EOFException):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Chargement du bâtiment java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2681) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3156) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358) at aaaProjetJAVA.Charger.chargerBat(Charger.java:32) at aaaProjetJAVA.Main.main(Main.java:7) Fin de lecture Exception in thread "main" java.lang.NullPointerException at aaaProjetJAVA.Main.main(Main.java:9)
Batiment :
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165 package aaaProjetJAVA; import java.io.Serializable; import java.util.*; public class Batiment implements Serializable { /** * */ private static final long serialVersionUID = 1L; private static int nombreDeBatiment = 0; private static List<Batiment> listeDesBatiments = new ArrayList<>(); private int idBatiment; private String nomBatiment; private ArrayList<Module> listeDesModulesDuBatiment; private int nombreDeModules; // Constructeur public Batiment(String nom) { idBatiment = Batiment.getNombreDeBatiment(); nomBatiment = nom; nombreDeModules = 0; listeDesModulesDuBatiment = new ArrayList<>(); // mise à jour des statiques dans le constructeur : Batiment.setNombreDeBatiment(1); Batiment.addBatiments(this); } // *********** méthode statique *********** // get nombre de batiment public static int getNombreDeBatiment() { return nombreDeBatiment; } private static void setNombreDeBatiment(int nombreDeBatimentAAjouter) { Batiment.nombreDeBatiment += nombreDeBatimentAAjouter; } // get Liste des Batiments public static List<Batiment> getListeDesBatiments() { return listeDesBatiments; } private static void addBatiments(Batiment batimentAAjouter) { Batiment.listeDesBatiments.add(batimentAAjouter); } // destructeur de bâtiment public static void detruireBatiment(Batiment batimentADetruire) { if (listeDesBatiments.contains(batimentADetruire)) { listeDesBatiments.remove(batimentADetruire); Batiment.setNombreDeBatiment(-1); } } // *********** méthode non statique *********** // To String @Override public String toString() { String texte = "\n"; if (listeDesBatiments == null) { texte += "Il n'y a aucun bâtiment construit"; return texte; } else { texte += "Le bâtiment n°" + this.idBatiment + " se nomme " + this.nomBatiment; if (this.nombreDeModules == 0) { texte += "\nIl ne possède aucun module\n\n"; return texte; } else { texte += "\nIl possède " + this.nombreDeModules + " modules"; texte += "\nSes modules sont :"; for (int i = 0; i < nombreDeModules; i++) { System.out.println("\n"); texte += this.getListeDesModules().get(i).toString(); } texte += "\nFin des modules\n\n"; return texte; } } } // Getters and Setters // Get ID (SET id à la construction) public int getIdBatiment() { return idBatiment; } // Get et Set NOM public String getNomBatiment() { return nomBatiment; } public void setNomBatiment(String nomBatiment) { this.nomBatiment = nomBatiment; } // nombreDeModule public int getNombreDeModules() { return nombreDeModules; } private void setNombreDeModules(int nombreDeModules) { this.nombreDeModules += nombreDeModules; } // Liste des Modules public List<Module> getListeDesModules() { return listeDesModulesDuBatiment; } private void addModule(Module moduleAAjouter) { if (moduleAAjouter != null) { this.listeDesModulesDuBatiment.add(moduleAAjouter); this.setNombreDeModules(1); } } public void retirerModule(int numRFID) { if (this.nombreDeModules != 0) { for (int i = 0; i < this.getNombreDeModules(); i++) { if (numRFID == this.getListeDesModules().get(i).getRFIDModule()) { this.listeDesModulesDuBatiment.remove(i); this.setNombreDeModules(-1); } } } } public void CreerEtAjouterNouveauModule(int numRFID, String nom) { Module nouveauModule = new Module(numRFID, nom); this.addModule(nouveauModule); System.out .println("Nouveau module " + nouveauModule.getNomModule() + ", N°RFID=" + nouveauModule.getRFIDModule() + " a été crée et ajouté au batiment " + this.nomBatiment + ", id=" + this.getIdBatiment()); } public void ajoutModuleAtteignable(int numRFIDModuleConcerne, int numRFIDModuleAtteignable) { for (int i = 0; i < this.nombreDeModules; i++) { if (this.getListeDesModules().get(i).getRFIDModule() == numRFIDModuleConcerne) { this.getListeDesModules().get(i).addModuleAtteignable(numRFIDModuleAtteignable); } } } public void retraitModuleAtteignable(int numRFIDModuleConcerne, int numRFIDModuleAtteignable) { for (int i = 0; i < this.nombreDeModules; i++) { if (this.getListeDesModules().get(i).getRFIDModule() == numRFIDModuleConcerne) { /*if (this.getListeDesModules().get(i).getListeDesRFIDDesModulesAtteignable() .contains((Integer) numRFIDModuleAtteignable)) {*/ this.getListeDesModules().get(i).removeModuleAtteignable(numRFIDModuleAtteignable); //} } } } // fin de classe }
Sauvegarder :
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 package aaaProjetJAVA; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Scanner; public class Sauvegarde { public static void sauvegarderBatiment(Batiment batiment) { System.out.println("\nSauvegarde des bâtiments\n"); // création fichier ObjectOutputStream oos; try { File file = new File("batiments.dat"); FileOutputStream stream = new FileOutputStream(file); BufferedOutputStream buffer = new BufferedOutputStream(stream); oos = new ObjectOutputStream(buffer); oos.writeObject(batiment); } catch (IOException e) { e.printStackTrace(); } } }
Charger :
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 package aaaProjetJAVA; import java.io.BufferedInputStream; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; import java.util.Scanner; public class Charger { public static Batiment chargerBat() { // *************************************************************** // Démarrage - verification de la présence du batiment enregistré ou // *************************************************************** System.out.println("Chargement du bâtiment"); // Chargement du bâtiment // création du flux en dehors du try ObjectInputStream ois = null; Batiment batim = null; Scanner sc = null; sc = new Scanner(System.in); try { // Si le batiment existe, il est chargé ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("batiments.dat")))); batim = (Batiment) ois.readObject(); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } catch (FileNotFoundException e) { // cette exception se déclenche si le fichier n'a pas été trouvé, // Il faut donc créer un batiment String nomBatiment; // Interrogation System.out.println("Aucun bâtiment n'a été trouvé"); System.out.println("Veuillez entrer un nom pour votre bâtiment :"); nomBatiment = sc.nextLine(); batim = new Batiment(nomBatiment); Sauvegarde.sauvegarderBatiment(batim); System.out.println("\n\n"); // création du flux de lecture } catch (EOFException eofE){ // fin du fichier } catch (IOException ioe) { ioe.printStackTrace(); } System.out.println("\nFin de lecture \n"); // System.out.println(batim.toString()); // sc.close(); return batim; } }
Main :
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149 package aaaProjetJAVA; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Batiment batiment0 = Charger.chargerBat(); ////Batiment batiment = System.out.println(batiment0.toString()); /* System.out.println("\nNombre de batiment construit : " + Batiment.getNombreDeBatiment()); System.out.println("Liste des batiments construit : "); if (Batiment.getListeDesBatiments().isEmpty()) { System.out.println("Il n'y a aucun bâtiment construit"); } else { System.out.println(Batiment.getListeDesBatiments().toString()); } System.out.println("\n\nConstruction de deux bâtiments ....\n\n"); Batiment bat0 = new Batiment("Batiment0"); Batiment bat1 = new Batiment("Batiment1"); System.out.println("\nNombre de batiment construit : " + Batiment.getNombreDeBatiment()); System.out.println("Liste des batiments construit : "); if (Batiment.getListeDesBatiments().isEmpty()) { System.out.println("Il n'y a aucun bâtiment construit"); } else { for (int i = 0; i < Batiment.getNombreDeBatiment(); i++) { System.out.println(Batiment.getListeDesBatiments().get(i).toString()); } } // création d'un module System.out.println("\n\n\nCréation d'un module pour le bâtiment : bat0"); bat0.CreerEtAjouterNouveauModule(100,"Module0duBat0"); if (bat0.getNombreDeModules() == 0) { System.out.println( "Il n'y a aucun module dans le batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment()); } else { System.out.println( "Les modules du batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment() + " sont :"); for (int i = 0; i < bat0.getNombreDeModules(); i++) { System.out.println("\n" + bat0.getListeDesModules().get(i).toString()); } } // création d'un autre module System.out.println("\n\n\nCréation d'un autre module pour le bâtiment : bat0"); bat0.CreerEtAjouterNouveauModule(101,"Module1duBat0"); if (bat0.getNombreDeModules() == 0) { System.out.println( "Il n'y a aucun module dans le batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment()); } else { System.out.println( "Les modules du batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment() + " sont :"); for (int i = 0; i < bat0.getNombreDeModules(); i++) { System.out.println("\n" + bat0.getListeDesModules().get(i).toString()); } } System.out.println(bat0.getNombreDeModules()); // suppression d'un module bat0.retirerModule(0); System.out.println("\n\n\n"); if (bat0.getNombreDeModules() == 0) { System.out.println( "Il n'y a aucun module dans le batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment()); } else { System.out.println( "Les modules du batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment() + " sont :"); for (int i = 0; i < bat0.getNombreDeModules(); i++) { System.out.println("\n" + bat0.getListeDesModules().get(i).toString()); } } // création d'un autre module System.out.println("\n\n\nCréation d'un autre module pour le bâtiment : bat0"); bat0.CreerEtAjouterNouveauModule(102,"Module2duBat0"); // création d'un autre module System.out.println("\n\n\nCréation d'un autre module pour le bâtiment : bat0"); bat0.CreerEtAjouterNouveauModule(103,"Module3duBat0"); // liste des bâtiments System.out.println("Liste des batiments construit : "); if (Batiment.getListeDesBatiments().isEmpty()) { System.out.println("Il n'y a aucun bâtiment construit"); } else { for (int i = 0; i < Batiment.getNombreDeBatiment(); i++) { System.out.println(Batiment.getListeDesBatiments().get(i).toString()); } } System.out.println(bat0.getListeDesModules().toString()); System.out.println("retrait module"); bat0.retirerModule(101); bat0.retirerModule(102); System.out.println(bat0.getListeDesModules().toString()); System.out.println("Ajout module atteignable"); bat0.ajoutModuleAtteignable(100, 105); bat0.ajoutModuleAtteignable(100, 103); bat0.ajoutModuleAtteignable(100, 150); System.out.println(bat0.toString()); System.out.println("retrait module atteignable"); bat0.retraitModuleAtteignable(100, 103); System.out.println(bat0.toString()); Sauvegarde.sauvegarderBatiment(bat0); */ //Sauvegarde.sauvegarderBatiment(batiment); // } // accolade de fin du main }
Partager