IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Deserilalisation modele d'un JTree


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut Deserilalisation modele d'un JTree
    Bonjour à tous,

    j'avais déja posté mon problème dans un topic déja résolu ici
    et malheureusement, je n'ai pas eu de réponses. C'est pourquoi je créé un nouveau topic.

    Le problème reste le même. Je serialise mon modèle tranquillement en utilisant cette methode:

    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
     
    public void serialiser(String nomFichier)
    {
    	try
    	{
    		// ouverture d'un flux de sortie vers le fichier 
    		FileOutputStream fos = new FileOutputStream(nomFichier);
     
    		// création d'un "flux objet" avec le flux fichier
    		ObjectOutputStream oos= new ObjectOutputStream(fos);
    		try
    		{
    			// sérialisation : écriture de l'objet dans le flux de sortie
    			oos.writeObject(this.modeleTreeTest);
     
    			// on vide le tampon
    			oos.flush();
    		}
    		finally
    		{
    			//fermeture des flux
    			try
    			{
    				oos.close();
    			}
    			finally
    			{
    				fos.close();
    			}
    		}
    	}
    	catch(IOException ioe)
    	{
    		ioe.printStackTrace();
    	}
    	System.out.println("Serialisation OK");
    }
    puis j'utilise cette methode pour deserialiser :

    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
     
    public void deserialiser(String nomFichier)
    {
    	try
    	{
    		// ouverture d'un flux d'entrée depuis le fichier 
    		FileInputStream fis = new FileInputStream(nomFichier);
     
    		// 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
    			this.modeleTreeTest = (DefaultTreeModel)ois.readObject();
    			this.modeleTreeTest.reload();
    		}
    		finally
    		{
    			// on ferme les flux
    			try
    			{
    				ois.close();
    			}
    			finally
    			{
    				fis.close();
    			}
    		}
    	}
    	catch(IOException ioe)
    	{
    		ioe.printStackTrace();
    	}
    	catch(ClassNotFoundException cnfe)
    	{
    		cnfe.printStackTrace();
    	}
    	System.out.println("Deserialisation OK");
    }
    L'objet modeleTreeTest est une instance de DefaultTreeModel. J'arrive à la serialiser sans aucun soucis, mais le hic, c'est lors de la déserialisation. Je choppe une belle exception :

    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
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: path in TreePath must be non null.
    	at javax.swing.tree.TreePath.<init>(TreePath.java:75)
    	at javax.swing.JTree.getPathForIndexs(JTree.java:3118)
    	at javax.swing.JTree.unarchiveExpandedState(JTree.java:3068)
    	at javax.swing.JTree.readObject(JTree.java:3005)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
    	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    	at javax.swing.JPopupMenu.readObject(JPopupMenu.java:1289)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    	at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
    	at javax.swing.tree.DefaultTreeModel.readObject(DefaultTreeModel.java:647)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    	at ihm.modele.ModeleFenetrePrincipale.deserialiser(ModeleFenetrePrincipale.java:94)
    	at ihm.controleur.Controleur$4.actionPerformed(Controleur.java:124)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)
    	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)
    	at java.awt.Component.processMouseEvent(Component.java:6134)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    	at java.awt.Component.processEvent(Component.java:5899)
    	at java.awt.Container.processEvent(Container.java:2023)
    	at java.awt.Component.dispatchEventImpl(Component.java:4501)
    	at java.awt.Container.dispatchEventImpl(Container.java:2081)
    	at java.awt.Component.dispatchEvent(Component.java:4331)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)
    	at java.awt.Container.dispatchEventImpl(Container.java:2067)
    	at java.awt.Window.dispatchEventImpl(Window.java:2458)
    	at java.awt.Component.dispatchEvent(Component.java:4331)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    qui se déclenche lors du readObject() de la deserialisation. Genre j'ai une variable null dans mon modèle (le fameux "path in TreePath must be non null") Or j'ai beau chercher dans l'api au niveau du DefaultTreeModel, hé ben je ne trouve rien qui puisse ressembler à un TreePath
    Une ame charitable aurait-elle une idée pour me tirer de ce mauvais pas ??

    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    up

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Pourquoi cherches tu à sérialiser un objet DefaultTreeModel et pas simplement tes données qui te servent à alimenter ton DefaultTreeModel ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    question pertinente.

    En fait j'ai lu dans differents tutos que pour serialiser une IHM, et bien il fallait sauvegarder seulement le modèle de l'IHM. Or vu que mon appli consiste essentiellement en un JTree dynamique, je me suis dit qu'en sauvegardant le modele du JTree j'étais bon...

    Merci du conseil en tout cas... Je m'attele à la tache de ce pas

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Merci beaucoup, ça marche desormais tres bien!!

    Il suffisait juste de serialiser/deserialiser le noeud racine de l'arbre au lieu du modele de l'arbre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le model d'un Jtree
    Par jejeman dans le forum Composants
    Réponses: 1
    Dernier message: 16/12/2014, 09h53
  2. Synchroniser JTree+JTables Models sur une même List
    Par iGwendal dans le forum Composants
    Réponses: 2
    Dernier message: 15/01/2010, 10h31
  3. Charger entierement le model d'un jTree au lancement
    Par mlmidmani dans le forum Composants
    Réponses: 1
    Dernier message: 04/02/2008, 16h38
  4. jTree : Synchronisation avec le model
    Par monstroplante dans le forum Composants
    Réponses: 11
    Dernier message: 21/05/2007, 15h18
  5. programmation reseau - couche 2 du modele osi
    Par sahor dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/11/2002, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo