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
 
}