Problème de sérialisation
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 :
Code:
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
|
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 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
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 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
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.