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

Agents de placement/Fenêtres Java Discussion :

Problème de serialization d'une Jframe


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Par défaut Problème de serialization d'une Jframe
    Bonjour,

    J'ai des soucis lorsque je tente de sérializer une application très simple réalisée avec swing.
    Voici l'exception levée:
    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: javax.swing.GroupLayout

    Je ne m'en sors pas, mes recherches de solutions sur le web restent sans réponses.

    Pourtant mon application est vraiment simpliste puisqu'elle ne fait intervenir qu'une Jframe, un menu (sauvegarder (serializer) / charger (désérializer) / quitter), un jPanel contenant un Jlabel indiquant le nombre de sauvegarde effectuées)...

    L'idée était de tester la sérialization en affichant la fenetre avec le nombre de sauvegarde initial à 0 (affiché dans le jLabel), de lancer la sérialization (en incrémentant le compteur et en l'affichant dans le jLabel puis sauver la fenetre dans un fichier via la sérialization) et de le récupérer en le réaffichant (en lançant la désérialization)...

    Cela pour ensuite pouvoir mettre en place la sérialization sur un jeu de plateau plus complexe développé avec swing pour permettre la sauvegarde/chargement d'une partie en cours...

    Je ne sais plus quoi faire. Toute aide serait la bienvenue...
    Merci.
    (si besoin je peux mettre en ligne le code de ma très petite application swing)

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Le truc c'est que pour pouvoir sérialiser une classe il faut que tout ces attributs soit sérializable. Hors GroupLayout ne l'est pas (pourquoi je n'en sait rien mais elle n'implémente pas Serializable). Tu ne pourra donc pas sérialiser ta JFrame.

    Mais généralement on ne sérialise pas un objet graphique, on sérialise l'objet métier (le modelé si tu utilise un MVC) qui va derrière et qui permet de reconstruire la partie graphique.

  3. #3
    Membre averti
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Par défaut
    Merci pour ta réponse (très rapide, je ne pensais pas avoir une réponse aussi rapidement)...

    Comme je le disais en fin de post: j'ai réalisé l'adaptation d'un jeu de plateau (essentiellement basé sur swing) dans laquelle j'ai près d'une centaine de composant swing, et je pensais pouvoir régler la sauvegarde d'une partie en cours via la sérialization, je suis bien embêté si tu me dis que cela n'est pas possible... Pourtant je n'utilise pas de gridLayout... La sérialization me semblait idéale... Tu es sur qu'il faille écarté cette solution ? Y'a pas un moyen, une astuce qui permettrait de contourner le problème ?

    Encore merci (je laisse le sujet comme n'étant pas résolu pour le moment, afin de voir si d'autres personnes n'ont pas d'idées ou de solutions à me proposer)

  4. #4
    Membre averti
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Par défaut
    Je voulais dire GroupLayout lorsque j'ai écris GillLayout... Bien entendu...

  5. #5
    Membre averti
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Par défaut
    De plus cela m'étonne car dans mes recherches j'ai bien lu que la majorité des composants swing étaient sérializable, cela doit bien servir à quelque chose, non ?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je rajouterais en plus que la serialisation de composant Swing n'est pas pérenne, c'est à dire qu'un composant sérialisé avec une certaine version de Java pourrait très bien ne plus être lisible s'il est lu avec une autre version...
    La sérialisation de composants Swing devrait être limitée à une sauvegarde "courte"...

    C'est d'ailleurs indiqué dans la javadoc de chacun des composant Swing.
    Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see XMLEncoder.

    A la rigueur tu pourrais utiliser XMLEncoder à la place de la serialisation, mais la meilleur solution vient de guigui5931 : Il faut une séparation entre l'interface graphique et le modèle de donnée, et ne sauvegarder que les données...


    a++

  7. #7
    Membre averti
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Par défaut
    Je comprends bien vos réponse mais je me demande alors pourquoi les composants swing implémentent ils l'interface serializable ?

    De plus (je suis peut être un peu trop têtu) je poursuis mes tests, et j'ai bien enregistré la valeur de mon jLabel et je la sors correctement lors de la désérialization via un system.out.println(monJLabel.getText()); mais là impossible de la réaffecter à mon jLabel qui semble figé (il n'est même plus réaffiché après des actions de base (je force des setText() dessus grace à des boutons et pareils en system.out.println les modifs sont prises en comptes mais à l'écran plus aucune modif n'apparait...)


    Encore une fois: merci pour vos réponses... je continue à creuser encore un peu ce serait tellement pratique de parvenir à un résultat en ce qui me concerne...

  8. #8
    Membre averti
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Par défaut
    Bon et bien je suis parvenu à un résultat mais il est loin d'être satisfaisant...
    Faudrait creuser encore (je récupère bien le texte de mon Jlabel sans le bloquer mais il faut récupérer les propriétés une à une ce qui est loin d'être mon objectif)...

    Je remercie toutes les personnes qui se sont penchées sur le sujet...

    Pensez vous que je doive cloturer le sujet ?

Discussions similaires

  1. Problème d'affichage dans une JFrame
    Par farwest dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/01/2009, 18h52
  2. problème de rafraichissement d'une JFrame
    Par MeDReD dans le forum Débuter
    Réponses: 8
    Dernier message: 21/07/2008, 20h19
  3. Problème de Thread gérant une JFrame
    Par pontus21 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 24/05/2008, 18h18
  4. Problème décalage du JPanel dans une JFrame a cause du JMenuBar
    Par matou72 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 09/03/2007, 20h17
  5. [SWING] Problème de taille logo d'une JFrame
    Par rprom1 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 05/05/2006, 16h51

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