roscomac
Messages postés6Date d'inscriptionsamedi 9 mai 2009StatutMembreDernière intervention21 décembre 2010
-
20 déc. 2010 à 00:18
Utilisateur anonyme -
22 déc. 2010 à 10:46
Bonjour à tous,
Je vous explique mon problème, j'ai un projet à faire, et je cherche à sérialiser une classe qui contient une arraylist.
Ma sérialisation se passe bien et quand je désérialise avant de quitter mon programme je récupère bien ma liste.
Mais quand je redémarre le programme, il ne récupère rien, alors que le fichier n'a pas été modifié entre temps.
Si vous avez des idées je suis preneur, j'ai tester plusieurs choses et je ne trouve pas de solution!
Merci d'avance.
johnjjj
Messages postés120Date d'inscriptiondimanche 4 avril 2010StatutMembreDernière intervention24 septembre 2012 20 déc. 2010 à 11:01
bonjour
j'aimerai savoir est ce que à la fin tu mis flash pour ObjectOutputStream
ObjectOutputStream oos =new ObjectOutputStream(fos);
.
.
....
oos.flush();
roscomac
Messages postés6Date d'inscriptionsamedi 9 mai 2009StatutMembreDernière intervention21 décembre 2010 20 déc. 2010 à 21:43
Je viens de tester et ça ne change rien..
est ce que je fois resérialiser une fois que j'ai désérialiser ou ce n'est pas nécessaire ? je ne vois vraiment pas ce qui bloque
roscomac
Messages postés6Date d'inscriptionsamedi 9 mai 2009StatutMembreDernière intervention21 décembre 2010 21 déc. 2010 à 18:43
Mon objet est un bien sérialisable puisque lorsque je test avant de quitter mon programme si mon objet a été sérialiser il me renvoie la liste non vide.
Mais le problème est quand je relance mon programme la liste est vide..
Quand tu sérialises une liste d'objets, cela ne vide pas la liste donc c'est normal que ta liste ne soit pas vide quand tu quittes ton programme. Comment testes-tu si ta liste a été sérialisée? Tu la désérialises de nouveau? As-tu pensé à fixer le serial version UID? Ton code ne respecte pas les bonnes pratiques mais il est assez trivial et devrait marcher. Peux-tu me montrer ta classe ListeCompte?
public class ListeCompte implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
private static ArrayList<Compte> liste = new ArrayList<Compte>();
public ArrayList<Compte> getListe() {
return liste;
}
public static void setListeCompte(ArrayList<Compte> liste) {
ListeCompte.liste = liste;
}
public ListeCompte(){
}
public static void ajout(Compte newCompte) throws FileNotFoundException, IOException{
liste.add(newCompte);
}
public void afficherContenu() {
// TODO Auto-generated method stub
Object[] tableau = liste.toArray();
for (int i=0; i < tableau.length ; i++ ){
Compte newCompte = (Compte) tableau[i];
System.out.println(newCompte.getNomCompte());
}
}
public void creerCompte(){
// TODO Auto-generated method stub
String nomCompte=scanNomCompte();
int numCompte=scanNumCompte();
String banque=scanNomBanque();
int montant=scanMontant();
Compte newCompte = new Compte(nomCompte,numCompte,banque, montant);
System.out.println("le compte "+nomCompte+ " a été creé");
try {
ajout(newCompte);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String scanNomCompte(){
System.out.println("Entrez le nom du compte :");
Scanner sc = new Scanner(System.in);
String nomCompte = sc.nextLine();
return nomCompte;
}
public static int scanNumCompte(){
System.out.println("Entrez le numero du compte :");
Scanner sc = new Scanner(System.in);
int numCompte =sc.nextInt();
return numCompte;
}
public static String scanNomBanque(){
System.out.println("Entrez le nom de la banque :");
Scanner sc = new Scanner(System.in);
String banque = sc.nextLine();
return banque;
}
public static int scanMontant(){
System.out.println("Entrez le montant initial du compte :");
Scanner sc = new Scanner(System.in);
int montant = sc.nextInt();
return montant;
}
public static void ajoutTransaction(Compte newCompte) throws Exception {
//vérifier compte existant, transaction affichier tout montant et compagnie!!
String debitCredit = Transaction.scanDebitCredit() ;
Categorie categorie = ListeCategorie.rechercherCategorie();
int montant = Transaction.scanMontant();
String moyenPayement = Transaction.scanMoyenPayement();
Date date = Transaction.scanDate();
Tiers tiers = ListeTiers.rechercherTiers();
Transaction newTransaction= new Transaction(debitCredit , montant, categorie, moyenPayement, date, tiers);
newCompte.setTransaction(newTransaction);
categorie.setTransaction(newTransaction);
tiers.setTransaction(newTransaction);
}
public static Compte rechercherCompte(){
Compte compteRechercher=liste.get(0);
int indice=0;
boolean test=false;
System.out.println("Veuillez taper le nom du compte souhaité.");
Scanner sc = new Scanner(System.in);
String nomCompteRechercher = sc.nextLine();
Object[] tableau = liste.toArray();
while (test=false)
{//tant que le nom du compte rechercher n'est pas trouver dans la liste
Ta classe ne respecte pas le contrat des Java Beans. Il ne suffit pas d'utiliser l'interface Serializable pour que les instances d'une classe puissent être sérialisées. Voici un exemple de classe sérialisable :
public class Personne{
private String nom;
public Personne(){}
public String getNom(){
return nom;
}
public void setNom(String nom){
this.nom = nom;
}
}
La classe doit être publique, avoir un constructeur sans paramètre public, les attributs doivent être des attributs d'instance et non des attributs de classe, chaque attribut à sérialiser doit avoir un accesseur en lecture (get...()) et un accesseur en écriture (set...()) publiques et respectant la syntaxe suivante : set ou get<nom de l'attribut avec la première lettre en majuscule>().
Ce n'est pas possible que les objets de ta classe ListeCompte se sérialisent correctement et ton code est confus, il y a beaucoup trop de méthodes et d'attributs statiques.