[JTree] Problème de Serialisation / Deserialisation
bonjour à tous,
j'ai un petit problème pour la déserialisation de mon JTree...
Voici comment je procède :
SERIALISATION
Code:
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:
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:cry:
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 8O
Est-ce un problème de Serialisation ou bien est-ce à cause de mes noeuds(et objets ) perso ??
merci d avance