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

Collection et Stream Java Discussion :

Serialization ArrayList Vide


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 60
    Points : 57
    Points
    57
    Par défaut Serialization ArrayList Vide
    Bonjour,
    Je voudrais créer une classe pour les joueurs dans un jeu, et je voudrais qu'elle soit serializable pour la charger au lancement du jeu et la sauvegarder à la fin.

    J'ai mis deux méthodes sauvegarder et restore dans ma classe qui sauvegarde un objet de type Joueurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void sauvegarder() throws IOException {
    		FileOutputStream fout = new FileOutputStream(dir + "/scores");
    		ObjectOutputStream out = new ObjectOutputStream(fout);
    		out.writeObject(joueurs);
    		out.close();
    	}
     
    	public void restore() throws IOException, ClassNotFoundException {
    		FileInputStream fin = new FileInputStream(dir + "/scores");
    		ObjectInputStream in = new ObjectInputStream(fin);
    		joueurs = (Joueurs) in.readObject();
    		in.close();
    	}
    La classe Joueurs contient un ArrayList de Joueur (Joueurs et Joueur sont sérializable)
    J'ai pas d'erreurs d’exécution, mais quand je lis mon fichier sauvegarder il est vide.
    Je sais pas ou est ce que j'ai pus faire la boulette ^^, j'ai fais un autre code plus simple ou ça marche mais pas sur celui la.

    Merci pour votre aide.

    ---

    Reste du code

    GestionJoueurs.java
    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
    package ia.reactivite.model.gestionJoueurs;
     
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.ArrayList;
     
    public class GestionJoueurs {
     
    	private Joueurs joueurs;
    	private static GestionJoueurs gestionJoueurs;
    	private String dir;
     
    	private GestionJoueurs(String dir) {
    		this.dir = dir;
    		joueurs = new Joueurs();
    	}
     
    	public static GestionJoueurs getInstance() {
    		if (gestionJoueurs == null)
    			gestionJoueurs = new GestionJoueurs("Reactivity");
    		return gestionJoueurs;
    	}
     
    	public void addJoueur(Joueur joueur) {
    		joueurs.addJoueur(joueur);
    	}
     
    	public Joueur getJoueurByName(String nom) {
    		return joueurs.getJoueurByName(nom);
    	}
     
    	public ArrayList<Joueur> getJoueurs() {
    		return joueurs.getJoueurs();
    	}
     
    	public void sauvegarder() throws IOException {
    		FileOutputStream fout = new FileOutputStream(dir + "/scores");
    		ObjectOutputStream out = new ObjectOutputStream(fout);
    		out.writeObject(joueurs);
    		out.close();
    	}
     
    	public void restore() throws IOException, ClassNotFoundException {
    		FileInputStream fin = new FileInputStream(dir + "/scores");
    		ObjectInputStream in = new ObjectInputStream(fin);
    		joueurs = (Joueurs) in.readObject();
    		in.close();
    	}
     
    	public static class Test {
    		public static void main(String[] args) {
    			GestionJoueurs g = GestionJoueurs.getInstance();
     
     
    			Joueur j = new Joueur("A");
    			j.addScore(12);
    			g.addJoueur(j);
     
    			try {
    				//g.sauvegarder();
    				g.restore();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (ClassNotFoundException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			for (Joueur a : g.getJoueurs())
    				System.out.println(a);
    		}
    	}
    }
    Joueurs.java
    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
     
    package ia.reactivite.model.gestionJoueurs;
     
    import java.io.Serializable;
    import java.util.ArrayList;
     
    public class Joueurs implements Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private static ArrayList<Joueur> joueurs;
     
    	public Joueurs() {
    		joueurs = new ArrayList<Joueur>();
    	}
     
    	public ArrayList<Joueur> getJoueurs() {
    		return joueurs;
    	}
     
    	public void addJoueur(Joueur joueur) {
    		if (!joueurs.contains(joueur))
    			joueurs.add(joueur);
    	}
     
    	public Joueur getJoueurByName(String nom) {
    		for (Joueur j : joueurs)
    			if (j.getNom().equals(nom))
    				return j;
    		return null;
    	}
    }
    Joueur.java
    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
    package ia.reactivite.model.gestionJoueurs;
     
    import java.io.Serializable;
    import java.util.ArrayList;
     
    public class Joueur implements Serializable, Comparable<Joueur> {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 2L;
     
    	private String nom;
    	private ArrayList<Integer> scores;
     
    	public Joueur(String nom) {
    		this.nom = nom;
    		scores = new ArrayList<Integer>();
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public ArrayList<Integer> getScores() {
    		return scores;
    	}
     
    	public void addScore(int score) {
    		scores.add(score);
    	}
     
    	@Override
    	public boolean equals(Object o) {
    		Joueur j = (Joueur) o;
    		if (j.nom.equals(this.nom))
    			return true;
    		return false;
    	}
     
    	@Override
    	public int compareTo(Joueur o) {
    		if (this.nom.compareTo(o.nom) > 0)
    			return -1;
    		else if (this.nom.compareTo(o.nom) < 0)
    			return 1;
    		return 0;
    	}
     
    	@Override
    	public String toString()
    	{
    		return nom;
    	}
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Java ne gère pas la sérialisation (mais le devrait-il ?) des variables static, il faut donc :

    • soit enlever le mot clé static. Ici il ne semble pas être utile.
    • soit redéfinir la méthode writeObject (et son équivalent en lecture) de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     private synchronized void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException{
      stream.writeInt(joueurs.size()); 
      for (int i=0; i<joueurs.size(); i++)
        stream.writeObject(joueurs.get(i));
      }
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    Merci pour la réponse, effectivement le mot clé static ne servait à rien, j'avais fais des modifications dans mon code et j'ai oublié de l'enlever.
    Problème résolu

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

Discussions similaires

  1. Problème inconnu (peut être ArrayList vide)
    Par Eausport dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 03/08/2012, 10h30
  2. Serialization d'une classe avec arraylist
    Par jpsegret dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 01/04/2007, 09h46
  3. [XML Serializer] Comment enlever les propriétés vides ?
    Par BillGates12345 dans le forum EDI/Outils
    Réponses: 5
    Dernier message: 02/08/2006, 10h49
  4. Serializer une ArrayList ou écrire dans un fichier texte?
    Par yvon_huynh dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/07/2006, 19h49
  5. Réponses: 1
    Dernier message: 04/05/2006, 11h33

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