Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1716 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  AIde débutant , problème de sérialisation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

AIde débutant , problème de sérialisation

n°2322898
wiikzz
Posté le 23-10-2018 à 18:37:32  profilanswer
 

Bonjour à tous ,  
Je suis étudiant en informatique de gestion et ca fait maintenant deux mois que j'étudie le langage JAVA sur netbeans .
Mais chaque semaine je bloque sur un problème et accumule un retard non négligeable ..  
Par exemple dans le code suivant (https://github.com/MartinHanin/S-rialisation-Entreprise), je dois sérialiser mon tableau dans un fichier binaire et un fichier txt .
Voici exactement les consignes de mon exercice :
 
A partir de l'exercice précédent, créer un menu qui:
 
permet l'introduction de données et sérialise les objets créés
effectue la lecture des employés et les affiche en console
effectue la lecture des employés et les affiche dans un fichier texte
quitte le programme
Ce travail sera évalué.
A remettre sous forme de projet netbeans compressé(zip) .
 
Mais malheureusement mon tableau est bien sérialiser mais il est NULL ..
Même un System.out d'une des valeurs de mon tableau retourne un Null ..
Pourtant en dehors de ma méthode de sérialisation , mon tableau est bien rempli .
 
Je vous remercie d'avoir lu et vous remercie encore plus si vous prenez le temps de m'aider .
Cordialement WiikzZ

mood
Publicité
Posté le 23-10-2018 à 18:37:32  profilanswer
 

n°2322901
rat de com​bat
attention rongeur méchant!
Posté le 23-10-2018 à 18:49:05  profilanswer
 

Et tu as tenté quoi déjà? Fais voir ton code. On ne fera pas l'exercice à ta place, cf règlement.

n°2322902
wiikzz
Posté le 23-10-2018 à 18:56:47  profilanswer
 

Merci de ta réponse  
Non évidemment ce n'est pas ma demande j'aimerais juste comprendre mon erreur pour continuer mon programme .
J'ai essayé d'autre méthode de sérialisation mais sans succès
Voici mon code , l'erreur doit être dans la méthode "execute" mais sans certitudes  :cry:  
 

Code :
  1. package be.iepscfjemelle.poolabo.martin.entreprise2;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.ObjectOutputStream;
  7. import java.io.PrintWriter;
  8. import java.io.Serializable;
  9. import java.util.Arrays;
  10. /**
  11. * Contrôleur contenant les méthodes de gestion du programme
  12. *
  13. * @author romu
  14. */
  15. public class Controller implements Serializable{
  16.     /**
  17.      * Liste des fonctions dans l'entreprise
  18.      */
  19.     private final String TAB[] = {
  20.         "Directeur",
  21.         "Comptable",
  22.         "Secrétaire",
  23.         "Ouvrier 1",
  24.         "Ouvrier 2",
  25.         "Ouvrier 3",
  26.         "Ouvrier 4"
  27.     };
  28.     /**
  29.      * Liste des objets Personne
  30.      */
  31.     public Personne liste[] = new Personne[7];
  32.     private String nomfich;
  33.    
  34.     /**
  35.      * Insertion des données via la console et création des objets
  36.      */
  37.     public void start() throws IOException, FileNotFoundException, ClassNotFoundException {
  38.         // Parcours de la liste des fonctions dans l'entreprise
  39.         for (int i = 0; i < TAB.length; i++) {
  40.             // Lecture des données dans la console
  41.             System.out.println("Entrez le nom de : " + TAB[i]);
  42.             String nom = Clavier.lireString();
  43.             System.out.println("Entrez le prénom de : " + TAB[i]);
  44.             String prenom = Clavier.lireString();
  45.             System.out.println("Entrez le numéro national de : " + TAB[i]);
  46.             String id = Clavier.lireString();
  47.             // Création d'un objet Personne
  48.             Personne obj = null;
  49.             switch (TAB[i]) {
  50.                 case "Directeur":
  51.                     obj = new Directeur(TAB[i], id, prenom, nom);
  52.                     break;
  53.                 case "Secrétaire":
  54.                     obj = new Secretaire(TAB[i], id, prenom, nom);
  55.                     break;
  56.                 case "Comptable":
  57.                     obj = new Comptable(TAB[i], id, prenom, nom);
  58.                     break;
  59.                 case "Ouvrier 1":
  60.                     obj = new Ouvrier(TAB[i], id, prenom, nom);
  61.                     break;
  62.                 case "Ouvrier 2":
  63.                     obj = new Ouvrier(TAB[i], id, prenom, nom);
  64.                     break;
  65.                 case "Ouvrier 3":
  66.                     obj = new Ouvrier(TAB[i], id, prenom, nom);
  67.                     break;
  68.                 case "Ouvrier 4":
  69.                     obj = new Ouvrier(TAB[i], id, prenom, nom);
  70.                     break;
  71.             }
  72.             // Ajout de l'objet Personne dans la liste
  73.             this.liste[i] = obj;
  74.            
  75.            
  76.         }
  77.         // Appel de l'affichage des personnes de l'entreprise
  78.         affiche();
  79.     }
  80.     /**
  81.      * Affichage des personnes de l'entreprise dans la console
  82.      */
  83.     private void affiche() throws IOException, FileNotFoundException, ClassNotFoundException {
  84.         System.out.println("================================================================" );
  85.         System.out.println("Liste des personnes de l'entreprise:" );
  86.         System.out.println("================================================================" );
  87. System.out.println(liste[1]);
  88.         // Parcours de la liste
  89.         for (Personne liste1 : liste) {
  90.             // Affichage dans la console
  91.             System.out.println(liste1.toString());
  92.             System.out.println("Description de mon travail: " );
  93.             liste1.travaille();
  94.             // Si c'est un directeur
  95.             if (liste1.getRole().equals("Directeur" )) {
  96.                 //liste1.comporte();
  97.                 /* On caste l'objet Personne en Directeur
  98.                 pour pouvoir utiliser la méthode comporte()
  99.                 qui est spécifique à un objet de type Directeur*/
  100.                 Directeur obj = (Directeur) liste1;
  101.                 obj.comporte();
  102.             }
  103.             System.out.println("************************************************************************\n" );
  104.            
  105.         }
  106.         Controller obj = new Controller();
  107.             obj.execute();
  108.             obj.Controller();
  109.         //Affichage Menu
  110.         Menu obj1 = new Menu();
  111.         obj1.ShowMenu();
  112.         System.out.println(liste[1]);
  113.     }
  114.     //////////////////////////////////////////////////////////////////////////////////////
  115.     //METHODES
  116.     /////////////////////////////////////////////////////////////////////////////////////
  117.     // Création du flux d'objet de sortie
  118.     ObjectOutputStream sortie;
  119.    
  120.     //Ecriture fichier texte
  121.     public void execute() throws FileNotFoundException, IOException, ClassNotFoundException {
  122.         // Initialisation des variables
  123.         this.nomfich = "Liste Personnes.txt";
  124.        
  125.         // Ecriture en fichier txt
  126.         try ( // Création du flux de sortie vers un fichier texte
  127.         // Print Writer permet l'écriture de texte dans le fichier
  128.                 PrintWriter sortie = new PrintWriter(new FileWriter(nomfich))) {
  129.             // Ecriture en fichier txt
  130.             sortie.print(liste);
  131.             // Fermeture du flux
  132.         }
  133.         // Affichage
  134.         System.out.println("Création terminée. " );
  135.         System.out.println(liste[1]);
  136.     }
  137.     //Ecriture en fichier bianire
  138.     public void Controller() throws IOException, FileNotFoundException, ClassNotFoundException {
  139.         this.sortie = new ObjectOutputStream(new FileOutputStream("personnes.dat" ));
  140.         // envoi des objets   
  141.         sortie.writeObject(liste);
  142.         // Fermeture du flux
  143.         sortie.close();
  144.     }
  145. }

n°2323756
cartemere
Posté le 07-11-2018 à 15:46:41  profilanswer
 

Hello,

 

Tu essaies de sérialiser un tableau d'objets de type 'Personne'

Citation :

public Personne liste[] = new Personne[7];

 

..

 

sortie.print(liste);

 

C'est donc plus du coté de la classe 'Personne' et de ses sous-classes qu'il faut regarder ;)

 


EDIT : et effectivement, en regardant sur ton Github, je constate que la classe 'Personne' n'est pas Serializable, et les classes filles non plus :jap:
Tu as par exemple un tuto ici : https://www.jmdoudoux.fr/java/dej/c [...] sation.htm qui explique le processus de sérialisation/désérialisation.

Citation :

Pour pouvoir être sérialisée, une classe doit implémenter l'interface java.io.Serializable ou l'interface java.io.Externalizable

  

PS : 2 petits conseils rapides au passage :
1 - évite d'écrire en Français, encore moins avec des accents dans le nom des variables (qui passeront mal sur certains compilateurs, et/ou avec certains systèmes de gestion de source)...
La "norme" veut que l'on écrive tout en anglais pour maximiser la ré-utilisabilité du code (si tu veux qu'un étranger puisse contribuer sur ton github par exemple )

 

2 - prends l'habitude de nommer les attributs pour ce qu'ils sont, aussi bien sur le plan technique que fonctionnel.

Citation :

public Personne liste[] = new Personne[7];


Ce n'est PAS une liste... c'est un tableau
(oui je suis chiant, mais sur des projets plus gros, où l'on manipule plus de variables, ça devient vite le bordel quand on mélange les torchons et les serviettes)


Message édité par cartemere le 07-11-2018 à 16:00:32

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  AIde débutant , problème de sérialisation

 

Sujets relatifs
[DEBUTANT] Condition pour ouvrir un fichier ne fonctionne pas[Java] Aide débutant Java
Problème avec ORDER BY[résolu] problème avec animations séquentielles
Besoin d'aide pour améliorer ma signature mail svp.probleme programmation vba sur EXCEL
Passer au tour suivant boucle for each et probleme ifAide sur expression régulière
aide à la compilation 
Plus de sujets relatifs à : AIde débutant , problème de sérialisation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR