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 :

Serialization et Deserialisation d'un JComponent


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 49
    Par défaut Serialization et Deserialisation d'un JComponent
    Bonjour,

    J'ai un problème avec la serialization et la deserialisation. J'ai une classe MaComponent qui etend de JComponent.

    Je possède une classe MaFrame qui étend de JFrame et qui contient un attribut de type MaComponent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class MaComponent extends JComponent
    {
    ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MaFrame extends JFrame {
     
    private MaComponent mc;
     
    }
    J'ai bien évidemment plein d'autre classes. J'ai besoin de pouvoir sauvegarder (dans un fichier), l'état de la fenetre et de tout ce qui se passe à l'écran.

    J'ai donc une méthode save qui enregistre mon object mc.

    Problème : quand je veux charger ce fichier, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.mc = (MaComponent) ois.readObject();
    Si je lis des attributs de mc, ils s'affichent correctement (l'objet s'est bien chargé).

    Problème : rien ne s'affiche à l'écran, même avec un this.mc.repaint();

    Voici ma méthode load :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    protected void load(){
    		ObjectInputStream ois;
    		try {
    			ois = new ObjectInputStream(
    					new BufferedInputStream(
    							new FileInputStream(
    									this.pathFile)));
     
    			try {
    				this.component = (MaComponent) ois.readObject();
    				//System.out.println(this.component.attribut1.toString());
    				this.component.repaint();
    			} catch (ClassNotFoundException e) {
    				e.printStackTrace();
    			} finally {
    				ois.close();
    			}
    Je pense qu'il y a un problème de rafraichissement de la fenêtre car l'attribut 1 affiche bien ce qui avait été sauvegardé.

    Une solution?

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Il manque un "add" du composant après l'avoir désérializé...

    remplacer une référence ne suffit pas à ajouter le container comme fils dans l'interface graphique!


  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 49
    Par défaut
    Ah merci ! Nickel depuis le temps que je cherchais. Ça semble plus simple avec la réponse.

    J'en profite pour poser une dernière question : ce n'est pas un peu "barbare et sale" d'enregistrer l'ensemble d'un JComponent?

    Merci encore

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par Peps0u Voir le message
    J'en profite pour poser une dernière question : ce n'est pas un peu "barbare et sale" d'enregistrer l'ensemble d'un JComponent?
    Si, très beaucoup....

    pas compatible d'une version du jdk à l'autre, plein de données inutiles dans ton cas, risque de tripatouillage des données binaires par un tier mal-intentionné (d'autant qu'apparement tu n'implémente pas de méthode readObject custom...), plus plein d'autres problèmes liés à la représentation binaire de ton composant (impossible de lui ajouter facilement de nouveaux composants enfants, etc...)

    Une sauvegarde dans un fichier xml ou properties est nettement mieux (et en plus, c'est facile à éditer pour un humain )


  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 49
    Par défaut
    Ok, merci beaucoup, je crois que je vais me laisser tenter par la sérialisation en XML .

Discussions similaires

  1. serialization / deserialisation d'un Enum
    Par olibara dans le forum C#
    Réponses: 6
    Dernier message: 06/07/2012, 12h05
  2. [serialization] Pb de deserialisation
    Par La_MouettE dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 08/09/2007, 18h26
  3. type serial : pb
    Par xopos dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/09/2004, 09h08
  4. [DB2 V7 & V8] equivalent du type SERIAL
    Par geoffrey_k dans le forum DB2
    Réponses: 3
    Dernier message: 05/07/2004, 14h09
  5. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11

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