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

Langage Java Discussion :

[swing][components]serialVersionUID : petite question ..


Sujet :

Langage Java

  1. #1
    Invité
    Invité(e)
    Par défaut [swing][components]serialVersionUID : petite question ..
    Bonjour,

    Je travaille avec Eclipse. Je crée plusieurs composants graphiques ( extensiosn de JLabel et de JButton, JFrame, JPanel, etc..)
    Mais eclipse me donne toujours un avertissement car je n'ai pas déclaré de champ final static serialVersionUID de type Long.
    J'en crée donc un mais pourquoi veut-il cela ?

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Lorsque tu n'en définis pas, la jvm en définit un à l'exécution. Selon les versions de la classe, il changera.

    Essaye de sérialiser/externaliser un objet dans un fichier, puis d'ajouter une ou deux méthodes, de recompiler, et de le désérialiser : meme nom de classe, mais serialVersionUID différents -> IOException. Alors qu'avec un numéro entré par le développeur, ça serait passé.
    Pareil en renommant juste un attribut sans toucher au comportement de la classe.

    Par contre, si tu touches aux attributs (nombre, type, ...), il faut changer le numéro parce que ça ne sera pas compatible avec l'objet sérialisé.

    J'ai été clair ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    C'est pour pouvoir serialiser les composants. Je ne vais pas entrer dans les details mais si tu ne sais pas de quoi je parle ou si tu n'as pas besoin de serialiser tes composants (c'est tres rare avec une interface graphique), tu peux oublier le serialVersionUID. Je te conseille d'aller dans les options d'Eclipse et dans la section Java de desactiver l'avertissement lie au serialVersionUID.
    Romain Guy
    Android - Mon livre - Mon blog

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok, merci à tous les deux.

    Je n'ai en effet pas besoin de sérialiser mais j'ai appris qu'il fallait un serialVersionUID pour le faire.

    Merci beacoup

  5. #5
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Points : 148
    Points
    148
    Par défaut
    D'ailleurs petite question :

    Quelle est la diff entre la serialisation et l'externalisation ?


    Moi on m'a toujours conseille d'utiliser l'externalisation mais je me rends compte que je ne sais pas pourquoi

  6. #6
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    La sérialisation écrit bêtement l'objet dans son état courant. L'externalisation permet de maitriser ce qui est écrit ou pas.
    Si certains attributs peuvent être calculés à partir d'autres, ce n'est pas la peine de les écrire. Ou si ils dépendent de la valeur de variables statiques, il faut les recalculer, et non pas les lire directement.
    Dans les 2 cas, la première chose qui est écrite, c'est le nom de la classe et son serialVersionUID.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  7. #7
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Points : 148
    Points
    148
    Par défaut
    Je croyais que ces notions (Externalisation,Serialisation) et fortement impliqué dans le processus RMI.. et tu n'y fais du tout allusion , est ce que c'est implicite ou ...

  8. #8
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Je ne connais pas RMI. Ca m'est arrivé de sérialiser des objets pour faire des sauvegardes (vers un FileOutputStream) ou pour communiquer par le réseau, c'est tout.
    Aussi, je suis certain d'être tout a fait incomplet et non exhaustif quand je parle de sérialisation, mais comme personne ne m'a contredit, je suppose que je n'ai pas écrit d'énormités.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  9. #9
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Points : 148
    Points
    148
    Par défaut
    en fait le RMI (remote method invocation) et le protocole de transport des données en architecture client serveur..
    et je ne sais pas quelle est la diff que ta classe soit sérialiser ou externaliser

  10. #10
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Oui, enfin, je n'ai jamais utilisé RMI, mais je connais le principe, et c'est clair que ça demande beaucoup de sérialisation.

    Sérialisation : l'objet est envoyé dans le flux tel qu'il est écrit en mémoire
    Externalisation : les données sont traitées entre la représentation mémoire et les données du flux (par les méthodes readExternal() et writeExternal() de l'interface Externalizable).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  11. #11
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Points : 148
    Points
    148
    Par défaut
    donc avec l'externalisation du maitrise les données anvoyéesc ..


    C'est cool je me coucherais moin ... ce soir !!


    Merci

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

Discussions similaires

  1. [swing] Petite question sur JColorChooser
    Par yupa dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/01/2006, 09h08
  2. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  3. Une petite question
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/08/2004, 16h19
  4. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 16h35
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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