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

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

Désérialisation d'un objet


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut Désérialisation d'un objet
    Bonjour à tous, je viens vous voir pour un problème de désérialisation.

    Je me suis laissé tenter par un programme permettant de sérialiser et désérialiser des Objets et je me rend compte que c'est plus difficile que je ne le pensais.

    Le premier soucis que j'ai rencontré, est venu de la sérialisation d'une image qui n'est pas possible. J'ai donc rajouté devant chaque images transient.
    Je l'ai rajouté par la suite au thread également.

    Et maintenant que la sérialisation à l'air de marcher, voila que la désérialisation me joue des tours.

    Message d'erreur:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at java.awt.Container.updateGraphicsData(Unknown Source)
    	at java.awt.Container.updateGraphicsData(Unknown Source)
    	at java.awt.Container.updateGraphicsData(Unknown Source)
    	at java.awt.Container.updateGraphicsData(Unknown Source)
    	at java.awt.Container.updateGraphicsData(Unknown Source)
    	at java.awt.Container.updateGraphicsData(Unknown Source)
    	at java.awt.Component.setGraphicsConfiguration(Unknown Source)
    	at java.awt.Window.setGraphicsConfiguration(Unknown Source)
    	at java.awt.Window.initGC(Unknown Source)
    	at java.awt.Window.initDeserializedWindow(Unknown Source)
    	at java.awt.Window.readObject(Unknown Source)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.readObject(Unknown Source)
    	at java.awt.Component.readObject(Unknown Source)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.readObject(Unknown Source)
    	at Laby.Principal$5.actionPerformed(Principal.java:218)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.AbstractButton.doClick(Unknown Source)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$200(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    public void sauvegarde (JMenuItem item) {
    		item.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				try {
    					ObjectOutputStream out;
    					out = new ObjectOutputStream(new FileOutputStream("sauvegarde.sav"));
    					out.writeObject(plat); 
    					out.close(); 
    				} catch (FileNotFoundException e) {
    					e.printStackTrace(); 
    					//System.out.println("coucou toi");
    				} catch (IOException e) {
    					e.printStackTrace();
    					//System.out.println("coucou vous");
    				}
    			}
    		});
    	}
     
    	public void charger(JMenuItem item) {
    		item.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) { 
    				ObjectInputStream in = null;
    				try {
    					in = new ObjectInputStream(new FileInputStream("sauvegarde.sav"));
    					try {
    						Plateau platRecup = (Plateau) in.readObject();
    					} catch (ClassNotFoundException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				} catch (FileNotFoundException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				try {
    					in.close();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} 
    			}
     
    		});
    	}

    Si vous aviez une idée SVP à priori l'erreur viendrait lors de l'appel de Plateau platRecup = (Plateau) in.readObject();

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ce bug a été fixé dans la version 7u10 de java. Tu utilise quelle version de java?
    http://bugs.java.com/view_bug.do?bug_id=8001982

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut
    Je suis à la version 7 Mise à jour 51 (build 1.7.0_51-b13)

    Par précaution je viens d'installer jdk-8u5-windows-x64.exe mais le problème persiste

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ok, dans ce cas, tout ce que je peux te suggérer c'est de simplifier au maximum ton interface pour identifier le composant qui pose problème. Tu désérialize bien de données sérializée avec exactement la même version de java au fait? Je suppose que oui, mais je pose quand même la question

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut
    Oui je suis bien sur la même version de Java, je ne travail pas en serveur j'essaie de faire une sauvegarde pour l'état d'un jeu.
    J'ai eu pas mal de soucis déjà pour la sauvegarde (Sérialization) il avait fallut que je passe toutes les images et mes threads en transient pour ne pas les sérialiser.

    J'ai entendu parler sur quelques discussions de forum qu'il existait une autre méthode pour sérializer en placant uniquement les éléments que l'on voulait sérializer ? Que me conseillerez vous ?

    Merci pour vos réponses en tous cas.

    Et autre question qui peut paraitre stupide est il possible d'empecher la serialization d'une fonction ?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si vous voulez juste sauver l'état d'un jeu, il est préférable de ne sérializer que le modèle. Vous n'avez pas besoin de sérializer les interfaces graphiques pour ça. Donc sauvez uniquement vos données correspondant au jeu. Vous pouvez même faire ce genre de sauvegarde "à la main" plutôt que de le faire avec de la sérialization qui estp lutot "aveugle"

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut
    Je pense que je vais me rabattre sur cette possibilité en effet, merci d'être venue en mon aide.

Discussions similaires

  1. Problème de lecture d'objet/désérialisation
    Par Yopii dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2009, 00h07
  2. [XStream] Désérialiser un objet avec une valeur par défaut
    Par djodjo dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 21/04/2009, 14h47
  3. Problème lors de la désérialisation de plusieurs objets
    Par casho dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 28/01/2009, 12h21
  4. [Axis] Désérialisation XML vers Objet Java
    Par jemini_fr dans le forum Services Web
    Réponses: 2
    Dernier message: 10/12/2007, 15h38
  5. [PDO] Désérialiser un objet provenant d'une table MySQL
    Par kiki650 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 23/10/2007, 17h20

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