Comment eviter une exception de serialVersionUID ?

Comment eviter une exception de serialVersionUID ? - Java - Programmation

Marsh Posté le 18-05-2005 à 14:11:05    

Salut, j'ai une classe Environnement :
 

Code :
  1. public class Environnement implements Serializable{


 
Ca compile nikel sauf que j'ai des warnings que je pige pas comment les eviter :
 
Environnement.java:7: warning: [serial] serializable class Environnement has no
definition of serialVersionUID
public class Environnement implements Serializable{
       ^
GUI.java:20: warning: [serial] serializable class GUI has no definition of seri
lVersionUID
public class GUI extends JFrame// implements Runnable
 
Une idée svp ?
 
D'ailleurs ma classe GUI n'implemente meme pas Serializable  :heink:


Message édité par Chronoklazm le 18-05-2005 à 14:11:59

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-05-2005 à 14:11:05   

Reply

Marsh Posté le 18-05-2005 à 14:23:25    

toutes les variables d'instance non-transient doivent être sérialisables aussi.
 
google > serialization+tutorial+java


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

Marsh Posté le 18-05-2005 à 15:14:40    

J'ai rajouté ca dans ma classe Environnement comme ils le dise dans l'API:
static final long serialVersionUID = 42L;
 
Mais je pige toujours pas pourquoi il me met des warnings concernant les classes qui n'implemente pas serializable ..


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-05-2005 à 15:19:13    

parce qu'elle seront appellées à être sérialisées si tu sérialises Environnement, car certaines des variables d'instances non-transient sont typées par ces classes.


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

Marsh Posté le 18-05-2005 à 16:21:26    

Ok d'accord donc sachant que dans GUI et MonPanel j'utilise une instance d'Environnement et que je veuille serializé Environnement il va aussi serialisé GUI et MonPanel ?
C'est mysterieux ça ??!!


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-05-2005 à 16:42:01    

non, à mon avis c'est dans l'autre sens !


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

Marsh Posté le 18-05-2005 à 16:44:26    

Pourtant c'est bien ce qui se passe chez moi ... dans Environnement j'utilise en aucun cas une instance de GUI ni de MonPanel et pourtant il me met des warning sur ces classes. Pas tres logique je suis d'accord.


Message édité par Chronoklazm le 18-05-2005 à 16:44:56

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-05-2005 à 17:01:26    

Ha ptain je crois que j'ai capté le beug :
 

Code :
  1. // Environnement.java
  2. import java.io.*;
  3. import java.util.*;
  4. public class Environnement implements Serializable{
  5. public static Map<String, Object> memoire = new HashMap<String,Object>();
  6. //static final long serialVersionUID = 42L;  
  7. public Environnement(){
  8. }
  9. public static void sauverEnv(String nomFichier){
  10.  try {
  11.   FileOutputStream fichier = new FileOutputStream(nomFichier);
  12.   ObjectOutputStream oos = new ObjectOutputStream(fichier);
  13.   oos.writeObject(memoire);
  14.   oos.flush();
  15.   oos.close();
  16.  }
  17.  catch (java.io.IOException e) {
  18.   e.printStackTrace();
  19.  }
  20.  finally{
  21.   System.out.println("Environnement sauvegarde avec succes !" );
  22.  }
  23. }
  24. public static void chargerEnv(String nomFichier){
  25.  try {
  26.   FileInputStream fichier = new FileInputStream(nomFichier);
  27.   ObjectInputStream ois = new ObjectInputStream(fichier);
  28.   memoire = (HashMap<String, Object> )ois.readObject();
  29.   ois.close();
  30.  }
  31.   catch (java.io.IOException e) {
  32.   e.printStackTrace();
  33.  }
  34.   catch (ClassNotFoundException e) {
  35.   e.printStackTrace();
  36.  }
  37.  finally{
  38.   System.out.println("Environnement charge avec succes !" );
  39.  }
  40. }
  41. }


 
Je serialise non pas une instance de Environnement mais une instance de ma HashMap ... je faisais nimp quoi :/


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-05-2005 à 17:04:42    

Peut on dire directement qu'une HashMap (et tout ce qu'il y a dedans) peut etre serializable ?


Message édité par Chronoklazm le 18-05-2005 à 17:08:38

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-05-2005 à 17:12:36    

Bon ca marche au top sauf que j'ai toujours les warnings


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-05-2005 à 17:12:36   

Reply

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

oui, si toutes ses clefs et toutes ses valeurs le sont.


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

Marsh Posté le 18-05-2005 à 17:20:39    

http://java.sun.com/j2se/1.5.0/doc [...] zable.html

Citation :

However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization.


 
voilou l'explication, ils ont carrément mis un warning dessus maintenant.


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

Marsh Posté le 18-05-2005 à 17:39:09    

nraynaud a écrit :

http://java.sun.com/j2se/1.5.0/doc [...] zable.html

Citation :

However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization.


 
voilou l'explication, ils ont carrément mis un warning dessus maintenant.


squand meme moisi, parce que d'un autre coté, faut pas se planter le jour ou on change *effectivement* la classe :/


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-05-2005 à 17:39:22    

ou alors faut utiliser xstream ! [:klem3i1]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-05-2005 à 17:40:50    

/FOU/ /FOU/ /FOU/


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

Marsh Posté le 18-05-2005 à 17:42:45    

c'est tout à fait adapté, ça demande deux lignes de code, et ça marche tout de suite.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-05-2005 à 17:46:35    

il faut que je teste, parce que là je suis au taquet avec la sérialization de base /o\


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

Sujets relatifs:

Leave a Replay

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