Problème de Serialization

Problème de Serialization - Java - Programmation

Marsh Posté le 17-05-2006 à 14:48:44    

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
Reply

Marsh Posté le 17-05-2006 à 14:48:44   

Reply

Marsh Posté le 17-05-2006 à 18:26:26    

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.

Reply

Marsh Posté le 17-05-2006 à 21:17:00    

a mon avis, avec ca:

Code :


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

Reply

Marsh Posté le 18-05-2006 à 09:57:15    

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.

Reply

Marsh Posté le 18-05-2006 à 14:51:03    

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

Reply

Marsh Posté le 18-05-2006 à 15:27:16    

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

Reply

Marsh Posté le 18-05-2006 à 15:28:52    

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 ?
Reply

Marsh Posté le 18-05-2006 à 15:58:16    

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:

Reply

Marsh Posté le 19-05-2006 à 11:28:01    

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.

Reply

Sujets relatifs:

Leave a Replay

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