bonjour à tous,
j'ai un petit problème pour la déserialisation de mon JTree...
Voici comment je procède :

SERIALISATION
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
 
			JFileChooser chooser = new JFileChooser();
			// on recupere le choix de l'utilisateur: OUVRIR/ANNULER
			int returnVal = chooser.showSaveDialog(null);
 
			// si le choix est OUVRIR on parcours le fichier
			if (returnVal == JFileChooser.APPROVE_OPTION) {
				//on recupere le chemin absolu du fichier
				String chemin = chooser.getSelectedFile().getAbsolutePath();
 
 
				if ( (!chooser.getSelectedFile().exists()) || 
						(JOptionPane.showConfirmDialog(
								null,
								"File already exist, override?",
								"override?",
								JOptionPane.YES_NO_OPTION
						) == JOptionPane.YES_OPTION) ){
 
					// on ajoute '.c' si besoin est
					if (!chemin.endsWith(".str"))
						chemin +=".str";
 
					// ouverture d'un flux de sortie vers le fichier "personne.serial"
					FileOutputStream fos = null;
					ObjectOutputStream oos =null;
					try {
						fos = new FileOutputStream(chemin);
						oos = new ObjectOutputStream(fos);
 
						// sérialisation : écriture de l'objet dans le flux de sortie
						oos.writeObject(arbre.getModel()); 
						// on vide le tampon
						oos.flush();
						System.out.println("arbre  a ete serialise");
 
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					}catch (IOException e) {
						e.printStackTrace();
					} finally{
						//fermeture des flux
						try {
							oos.close();
							fos.close();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}//fin de si
			}//fin de si

DESERIALISATION
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
 
                        JFileChooser chooser = new JFileChooser();
			// on recupere le choix de l'utilisateur: OUVRIR/ANNULER
			int returnVal = chooser.showOpenDialog(null);
 
			// si le choix est OUVRIR on parcours le fichier
			if (returnVal == JFileChooser.APPROVE_OPTION) {
				//on recupere le chemin absolu du fichier
				String chemin = chooser.getSelectedFile().getAbsolutePath();
 
 
				if ( chemin != null && !"".equals(chemin)){
 
					try {
						// ouverture d'un flux d'entrée depuis le fichier "personne.serial"
						FileInputStream fis = new FileInputStream(chemin);
						// création d'un "flux objet" avec le flux fichier
						ObjectInputStream ois= new ObjectInputStream(fis);
						try {	
							// désérialisation : lecture de l'objet depuis le flux d'entrée
							arbre.setModel((TreeModel) ois.readObject()); 
							panelArbre.setViewportView(arbre);
						} finally {
							// on ferme les flux
							try {
								ois.close();
							} finally {
								fis.close();
							}
						}
					} catch(IOException ioe) {
						ioe.printStackTrace();
					} catch(ClassNotFoundException cnfe) {
						cnfe.printStackTrace();
					}
				}//fin de si
			}//fin de si
A priori c'est correct non ? Je repris le code du site sur la serialisation

L'ERREUR:
J'ai un renderer personnalisé et des noeud qui contiennent des objets personnalisés aussi.... ce qui donne : MyTreeRenderer, MyCustomNode, et MyTreeObject dans l ordre...
et quand je charge le modèle MyTreeRenderer lance une exception car les objets sont null apparement

Est-ce un problème de Serialisation ou bien est-ce à cause de mes noeuds(et objets ) perso ??

merci d avance