Serialization et ClassCastException

Serialization et ClassCastException - Java - Programmation

Marsh Posté le 13-05-2005 à 23:07:24    

Bonjour,
 
Je suis en train de créer une application manipulant des JTree. J'ai crée un type de noeud spécifique contenant une étique et une String associé (une description). Cette classe appellé ContentNode implemente MutableTreeNode. Je serialize ensuite cette objet pour récupérer mon arbre dans un applet afin de visualiser ses noeuds et leurs descriptions associées. Voici le code :
 

Code :
  1. public void valueChanged(TreeSelectionEvent e) {
  2.  //On récupere le noeud sélectionné par l'utilisateur
  3.  currentNode = e.getNewLeadSelectionPath();
  4.  //Affiche la page html du noeud courant
  5.  if(currentNode != null) {
  6.   MutableTreeNode noeud = (MutableTreeNode)currentNode.getLastPathComponent();
  7.   System.out.println("noeud : "+noeud.getClass()); //Retourne bien ContentNode
  8.                         //J'affiche le String associé au noeud cliqué
  9.   Editeur.setText(((ContentNode)noeud).getSiteHtml());
  10.  }
  11. }


 
la ligne  
 

Code :
  1. Editeur.setText(((ContentNode)noeud).getSiteHtml());


 
retourne une erreur :

Code :
  1. java.lang.ClassCastException
  2.    at client.AppletTree.valueChanged(AppletTree.java:147)
  3.    at javax.swing.JTree.fireValueChanged(Unknown Source)
  4.    at javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
  5.    at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
  6.    at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(Unknown Source)
  7.    at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(Unknown Source)
  8.    at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(Unknown Source)
  9.    at javax.swing.JTree.setSelectionPath(Unknown Source)
  10.    at javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(Unknown Source)
  11.    at javax.swing.plaf.basic.BasicTreeUI$MouseHandler.handleSelection(Unknown Source)
  12.    at javax.swing.plaf.basic.BasicTreeUI$MouseHandler.mousePressed(Unknown Source)
  13.    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
  14.    at java.awt.Component.processMouseEvent(Unknown Source)
  15.    at java.awt.Component.processEvent(Unknown Source)
  16.    at java.awt.Container.processEvent(Unknown Source)
  17.    at java.awt.Component.dispatchEventImpl(Unknown Source)
  18.    at java.awt.Container.dispatchEventImpl(Unknown Source)
  19.    at java.awt.Component.dispatchEvent(Unknown Source)
  20.    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
  21.    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
  22.    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
  23.    at java.awt.Container.dispatchEventImpl(Unknown Source)
  24.    at java.awt.Component.dispatchEvent(Unknown Source)
  25.    at java.awt.EventQueue.dispatchEvent(Unknown Source)
  26.    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
  27.    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  28.    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  29.    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  30.    at java.awt.EventDispatchThread.run(Unknown Source)


 
En gros je ne peux convertir mon MutableTreeNode (le noeud courant) en un ContentNode.
Pour etre sur voici l'entete de ma classe ContentNode :
 

Code :
  1. public class ContentNode implements MutableTreeNode, Serializable {


 
Le pire étant que j'ai exactement le meme code non pas dans un Applet mais dans un JPanel et la aucune erreur tout se passe bien...
Il y a peut etre un probleme avec ma sérialization...
 
Si quelqu'un voit ca serai super ! Merci :jap:


Message édité par Loizo le 14-05-2005 à 16:16:25
Reply

Marsh Posté le 13-05-2005 à 23:07:24   

Reply

Marsh Posté le 14-05-2005 à 13:05:53    

Il n'y a aucune cas spécial quand on utilise la sérialization avec un applet ?

Reply

Marsh Posté le 15-05-2005 à 12:50:50    

A priori ca n'inspire personne... :/

Reply

Marsh Posté le 15-05-2005 à 16:51:05    

ben déjà ca a rien à voir avec la sérialisation ton problème ... c'est juste un problème de cast ...
 
par contre, je ne vois pas où est l'erreur, si noeud.getClass() te retournes bien la Class ContentNode, il n'y a aucune raison que tu ne puisse pas caster noeud en ContentNode ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-05-2005 à 16:54:05    

Bah ouais c'est ca le truc dingue.
Et si je pense que c'est lié a la serialization car a la base je crée un arbre dans la méthode init() de l'applet, la je peux cliquer sans probleme. Apres je fais Fichier >>> Ouvrir et j'importe un arbre deja crée. Et la ca plante au cast donc a priori c'est en utilisant l'objet serializé que ca foire.  
 
Le truc c'est que l'objet est enregistré dans un autre programme (un panneau admin en gros ou je crée l'arbre...) et je le récupere dans l'applet. Donc peut etre que l'objet serializé que je recupere n'est utilisable que dans la partie admin (car c'est le meme code et ca marche) mais je ne comprend pas pourquoi... ??

Reply

Marsh Posté le 15-05-2005 à 16:58:00    

c'est les mêmes fichiers .class pour ton applet et ton administrateur ? la classe a pas été recompilée après coup ?


Message édité par benou le 15-05-2005 à 17:01:18

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-05-2005 à 17:40:49    

un problème de classloader ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-05-2005 à 17:41:58    

Je travaille avec Eclipse et j'ai un repertoire contenant tout les fichiers Admin donc ContentNode.class et dans ce répértoire un autre répertoire Client dans lequel j'ai toute les classes du Client (l'Applet et tout) et j'ai recrée une classe ContentNode (donc j'ai un ContentNode.class dans ce dossier aussi) et Eclipse m'a crée autmoatiquement un package client (au début de chacune de mes classes Client).
 
Ca pourrai venir de la ?

Reply

Marsh Posté le 15-05-2005 à 17:42:33    

classloader ?
J'ai vu ca en faisant des recherches sur Google, ca veut dire quoi ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed