Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1328 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème de Serialization

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de Serialization

n°1368782
Ledid
Posté le 17-05-2006 à 14:48:44  profilanswer
 

Bonjour,
 
J'ai un souci de Serialization. Je tente de serializer un objet JXTreeTable (API SwingLabs) qui hérite de JTable. Théoriquement, ça devrait marcher puisque ces 2 classes sont serializables.
Le problème, c'est que lors de l'appel à la fonction writeObject, il me met systématiquement une erreur m'indiquant que java.beans.EventHandler n'est pas Serializable.
 
Voici mon code :

Code :
  1. public class JXTreeTableForecast extends JXTreeTable implements Serializable {
  2. private Plan plan;
  3. private int nbDisplayedPeriods;
  4. private int firstPeriodColumnIndex;
  5. public void save(String fileName) {
  6.  FileOutputStream fos = null;
  7.  ObjectOutputStream out = null;
  8.  try {
  9.   fos = new FileOutputStream(fileName + ".ser" );
  10.   out = new ObjectOutputStream(fos);
  11.   out.writeObject(this);
  12.   out.close();
  13.  } catch (IOException ex) {
  14.   ex.printStackTrace();
  15.  }
  16. }
  17. public static JXTreeTableForecast open(String fileName) {
  18.  FileInputStream fis = null;
  19.  ObjectInputStream in = null;
  20.  JXTreeTableForecast table = null;
  21.  try {
  22.   fis = new FileInputStream(fileName + ".ser" );
  23.   in = new ObjectInputStream(fis);
  24.   table=(JXTreeTableForecast) in.readObject();
  25.   in.close();
  26.  } catch (IOException ex) {
  27.   return null;
  28.  } catch (ClassNotFoundException ex) {
  29.   return null;
  30.  }
  31.  return table;
  32. }
  33. public static void main(String[] args) {
  34.  JXTreeTableForecast treeTable;
  35.  Plan plan = JXTreeTableForecast.createPlan(false);
  36.  ForecastTreeTableModel model = new ForecastTreeTableModel(plan);
  37.  Constants.init();
  38.  Configuration.init();
  39.  treeTable = JXTreeTableForecast.open("sauvegarde" );
  40.  if (treeTable == null) {
  41.   treeTable = new JXTreeTableForecast(model, plan, 2);
  42.  }
  43.                 //Test pour voir si ça marche... Et ça plante!
  44.  treeTable.save("sauvegarde" );
  45.  JFrame f = new JFrame();
  46.  f.getContentPane().add(treeTable);
  47.  f.setLocation(50, 75);
  48.  f.setSize(new Dimension(500,300));
  49.  f.setVisible(true);
  50.  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  51.  f.add(new JScrollPane(treeTable));
  52. }
  53. public static Plan createPlan(boolean siteOnRow) {
  54.  Plan plan = new Plan();
  55.  plan.setSiteOnRow(siteOnRow);
  56.  plan.createLine("patisserie", new Client("Auchan", "AU2132" ));
  57.  plan.createLine("saucisson", new Client("Leclerc", "LE1234" ));
  58.  plan.initColumnNamesAndClasses();
  59.  Period period = plan.getPeriods().get(0);
  60.  ForecastPointFdR pointFdR = plan.getChildren().get(1).getPoint(period)
  61.    .getPointFdR();
  62.  pointFdR.setValue(20);
  63.  pointFdR = plan.getChildren().get(0).getPoint(period).getPointFdR();
  64.  pointFdR.setValue(40);
  65.  pointFdR.addComment("Ceci est un premier commentaire" );
  66.  pointFdR.addComment("Ceci est un deuxième commentaire" );
  67.  return plan;
  68. }
  69. public JXTreeTableForecast(ForecastTreeTableModel model, Plan plan,
  70.   int nbPeriodsToDisplay) {
  71.  super(model);
  72.  nbDisplayedPeriods = nbPeriodsToDisplay;
  73.  firstPeriodColumnIndex = (plan.isSiteOnRow()) ? 5 : 4;
  74.  this.plan = plan;
  75.  setTreeCellRenderer(new TreeTableCellRenderer());
  76.  HighlighterPipeline highlighters = new HighlighterPipeline();
  77.  highlighters.addHighlighter(new AlternateRowHighlighter());
  78.  setHighlighters(highlighters);
  79.  expandRow(0);
  80.  expandRow(1);
  81.  addMouseMotionListener(new TreeTableMouseMotionListener(this));
  82.  addMouseListener(new TreeTableMouseListener(this));
  83.  packAll();
  84.  setColumnControlVisible(true);
  85. }
  86. public Plan getPlan() {
  87.  return plan;
  88. }
  89. }


 
et voici l'erreur :  

Code :
  1. java.io.NotSerializableException: java.beans.EventHandler
  2. at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  3. at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
  4. at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
  5. at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
  6. at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  7. at java.io.ObjectOutputStream.writeObject(Unknown Source)
  8. at javax.swing.event.EventListenerList.writeObject(Unknown Source)
  9. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  10. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  11. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  12. at java.lang.reflect.Method.invoke(Unknown Source)
  13. at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
  14. at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
  15. at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
  16. at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  17. at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
  18. at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
  19. at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
  20. at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  21. at java.io.ObjectOutputStream.writeObject(Unknown Source)
  22. at javax.swing.ArrayTable.writeArrayTable(Unknown Source)
  23. at javax.swing.ActionMap.writeObject(Unknown Source)
  24. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  25. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  26. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  27. at java.lang.reflect.Method.invoke(Unknown Source)
  28. at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
  29. at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
  30. at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
  31. at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  32. at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
  33. at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
  34. at javax.swing.JComponent.writeObject(Unknown Source)
  35. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  36. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  37. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  38. at java.lang.reflect.Method.invoke(Unknown Source)
  39. at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
  40. at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
  41. at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
  42. at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  43. at java.io.ObjectOutputStream.writeObject(Unknown Source)
  44. at forecast.table.JXTreeTableForecast.save(JXTreeTableForecast.java:42)
  45. at forecast.table.JXTreeTableForecast.main(JXTreeTableForecast.java:77)
  46. Exception in thread "main" java.lang.NullPointerException
  47. at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source)
  48. at javax.swing.JComponent.getPreferredSize(Unknown Source)
  49. at javax.swing.JTable.setWidthsFromPreferredWidths(Unknown Source)
  50. at javax.swing.JTable.doLayout(Unknown Source)
  51. at java.awt.Container.validateTree(Unknown Source)
  52. at java.awt.Container.validateTree(Unknown Source)
  53. at java.awt.Container.validateTree(Unknown Source)
  54. at java.awt.Container.validateTree(Unknown Source)
  55. at java.awt.Container.validateTree(Unknown Source)
  56. at java.awt.Container.validate(Unknown Source)
  57. at java.awt.Window.show(Unknown Source)
  58. at java.awt.Component.show(Unknown Source)
  59. at java.awt.Component.setVisible(Unknown Source)
  60. at forecast.table.JXTreeTableForecast.main(JXTreeTableForecast.java:83)


Message édité par Ledid le 17-05-2006 à 14:53:10
mood
Publicité
Posté le 17-05-2006 à 14:48:44  profilanswer
 

n°1369096
Ledid
Posté le 17-05-2006 à 18:26:26  profilanswer
 

J'ai abandonné : en mettant plein de code en commentaires et en remplaçant l'héritage par JTable, ça marche puis en mettant JXTable, ça rebug : je crois que la librairie SwingLabs est trop jeune et souffre de quelques bogues.

n°1369177
souk
Tourist
Posté le 17-05-2006 à 21:17:00  profilanswer
 

a mon avis, avec ca:

Code :


ce n''est pas une erreur de serialization, enfin je me trompe peut etre [:dawa]

n°1369374
Ledid
Posté le 18-05-2006 à 09:57:15  profilanswer
 

oui je pense que tu te trompes. Il y a en fait 2 erreurs. La première est la NonSerializableException. Cette exception occupe les lignes 1 à 45 des traces d'execution.
Puis le programme continue. Puisqu'il n'a pas réussi à créer un objet, celui-ci est null et j'obtiens alors un NullPointerException.
C'est dans ce sens qu'il faut lire les erreurs et pas uniquement de bas en haut.

n°1369709
max25b
Posté le 18-05-2006 à 14:51:03  profilanswer
 

est ce que tu as mis cette ligne:
private static final long serialVersionUID = 1L;
 
il me semble que javais eu un probleme de serialisation aussi et que javais ajoute cette ligne dans la class et ca marchait....je ne sais pas si cest le meme probleme mais essaie quand meme....tas rien a perdre

n°1369763
Ledid
Posté le 18-05-2006 à 15:27:16  profilanswer
 

Bah non! C'est loupé! J'ai tenté au cas où et non ça ne marche pas. Il me semble que cette ligne a pour but de gérer les différentes versions des objets sérializés

n°1369764
the real m​oins moins
Posté le 18-05-2006 à 15:28:52  profilanswer
 

max25b a écrit :

est ce que tu as mis cette ligne:
private static final long serialVersionUID = 1L;
 
il me semble que javais eu un probleme de serialisation aussi et que javais ajoute cette ligne dans la class et ca marchait....je ne sais pas si cest le meme probleme mais essaie quand meme....tas rien a perdre


essayer au hasard un truc qu'on comprend pas ? [:mlc]
rien à perdre? [:mlc]
et si on te disait que si, y'a bcp à perdre? [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1369794
max25b
Posté le 18-05-2006 à 15:58:16  profilanswer
 

the real moins moins a écrit :

essayer au hasard un truc qu'on comprend pas ? [:mlc]
rien à perdre? [:mlc]
et si on te disait que si, y'a bcp à perdre? [:mlc]


 :non:

n°1370403
Ledid
Posté le 19-05-2006 à 11:28:01  profilanswer
 

Dans mon cas, je testais la sérialization donc je n'avais encore aucune donnée persistente précieuse, donc effectivement, je n'avais rien à perdre.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème de Serialization

 

Sujets relatifs
probleme de lecture/ecriture dans un fichier excelApplet java, archive jar -> probleme Worng name :(
probleme de parametre privé dans classeprobleme de récupération dans bouton ratio
WSAD - Problème - RésoluProblème avec PHP et .htaccess
probleme sur une requete SQLprobleme input text valeur par defaut
GROS PROBLEME sous VBA word...Memoire insuffisante?Problème de sérialization
Plus de sujets relatifs à : Problème de Serialization


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR