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 java : 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 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 java : 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 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 java : Sélectionner tout - Visualiser dans une fenêtre à part
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 java : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager