Sérialisation

Résolu/Fermé
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - Modifié le 14 déc. 2019 à 20:26
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - 28 déc. 2019 à 19:56
Bonjour, je crée actuellement une application javafx, et je suis bloqué sur la sérialisation. J'essaye de sérialiser une classe qui est une liste de joueur comme suit :

public class ListeJoueurs implements Serializable {
    private static ObservableList<Joueur> listJoueurObs = FXCollections.observableArrayList();
    private static ListProperty<Joueur> listJoueur = new SimpleListProperty<>(listJoueurObs);
        public ObservableList<Joueur> getListJoueur() {return listJoueur.get();}
        public void setListJoueur(ObservableList<Joueur> value) {listJoueur.set(value);}
        public static ListProperty<Joueur> listJoueurProperty() {return listJoueur; }
    private static Manageur manageur = new Manageur();
    static {

            listJoueurObs.add(new Joueur("cloclo"));
            listJoueurObs.add(new Joueur("hamster18"));
            listJoueurObs.add(new Joueur("Alex"));
    }

    protected void ajouter (Joueur joueur){
       listJoueurObs.add(joueur);
    }

    public void supp (){
        int i;
        for(i=0; i<=listJoueurObs.size(); i++)
            listJoueurObs.remove(listJoueurObs.get(i));
    }



La classe joueur est comme ceci :


public class Joueur implements Serializable {
    private final StringProperty surname = new SimpleStringProperty();
        public String getSurname() {return surname.get();}
        public void setSurname(String valeur) {surname.set(valeur);}
        public StringProperty surnameProperty() {return surname;}

    private final ObjectProperty<Integer> nbPartieGagnee = new SimpleObjectProperty<>();
        public int getNbPartieGagnee() {return nbPartieGagnee.get();}
        public void setNbPartieGagnee(int valeur) {nbPartieGagnee.set(getNbPartieGagnee()+valeur);}

    public  Joueur(){
        this("");
    }

    public Joueur(String surname){
        this.surname.setValue(surname);
        this.nbPartieGagnee.setValue(0);
    }
}



Ensuite j'essaye de sérialisé et désérialiser pour tester mon code.
Ainsi dans une fênetre qui affiche le contenu de ma liste j'ai un bouton sauvegarder qui appelle cette méthode :

    public void save(ListeJoueurs listJoueurs) {
        try(FileOutputStream fos = new FileOutputStream("listeJoueur.txt")){
            System.out.println("print list sauvegarder");
            for(Joueur str:(listJoueurs.getListJoueur())){
                System.out.println(str.getSurname());
            }
            ObjectOutputStream oss = new ObjectOutputStream(fos);
            oss.writeObject(listJoueurs);
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }


Puis je supprime tout les éléments de la liste et j'essaye de la re- remplir en appelant la méthode suivante :
    public ListeJoueurs load() {
        ListeJoueurs listJoueurs = null;
        try (FileInputStream fis = new FileInputStream("listeJoueur.txt")) {
            ObjectInputStream ois = new ObjectInputStream(fis);
            listJoueurs=(ListeJoueurs)ois.readObject();
        }
        catch (IOException | ClassNotFoundException e){
            e.printStackTrace();
        }
        return listJoueurs;
    }


Cependant ma liste reste vide ....

Je ne sais pas si mon problème vient de ma sérialisation ou de ma dé-sérialisation... J'ai regardé le contenu de ma variable list quand je la sérialise et ma liste de joueur et compose de 3 de trois joueurs (donc remplie), de plus mon fichier binaire aussi se remplie... en conséquence je ne voit pas pourquoi elle est vide lors de la dé-sérialisation.

Merci d'avance pour votre aide.

Cordialement.

1 réponse

Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
28 déc. 2019 à 19:56
J'ai fini par résoudre mon problème en redéfinissant la méthode readObject et writeObject ... Merci pour votre aide =)
0