IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Probleme d'exception lors de sérialisation


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut Probleme d'exception lors de sérialisation
    Bonsoir,

    j'ai un petit soucis qui ne fait pas buggé mon application mais j'aimerai comprendre pourquoi ça m'affiche une erreur ( catch )



    Code : 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
    26
    27
    28
    29
    private void loadConsultation()
        {
            try
            {
                File f = new File("consultation.data");
                if(f.exists()) 
                {
                    FileInputStream fis = new FileInputStream(f);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                    consultationV =(Vector<Consultation>) ois.readObject();
                    ois.close();
                }
                else
                    f.createNewFile();
     
            }
            catch(FileNotFoundException e)
            {
                System.err.println("Erreur fichier non trouvé : "+e.getMessage());
            }
            catch(IOException e)
            {
                System.err.println("Erreur --> "+e.getMessage());
            }
            catch(ClassNotFoundException e )
            {
                System.err.println("Erreur ! Classe non trouvée --> "+e.getMessage());
            }
        }

    Donc je commence par vérifié si mon fichier Consultation.data existe sinon je le crée. Jusque là tout va bien. Cependant arrivé à ObjectInputStream ois = new ObjectInputStream(fis); cela lance une IOException dont le e.getMessage(); vaut null. Je ne comprends pas pourquoi cela me fait ça étant donné que je crée bien le fichier au préalable.



    Au final ce que je voudrai c'est lors du lancement de mon application je lance la fonction ci dessus : loadConsultation();. Elle verifie si le fichier existe si oui elle charge les données dans mon Vector sinon elle le crée.



    A remarquer que quand le fichier n'est pas vide c'est à dire que quand j'ai sérialisé des données dedans avec ma méthode :



    Code : 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
    private void saveConsultation()
        {
            try
            {
                File f = new File("consultation.data");
                if(!f.exists()) 
                {
                    f.createNewFile();
                }
                FileOutputStream fos = new FileOutputStream(f);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(consultationV);
                oos.close();
     
            }
            catch(FileNotFoundException e)
            {
                JOptionPane.showMessageDialog(this,"Erreur Fichier non trouvé --> "+e.getMessage());
            }
            catch(IOException e)
            {
                JOptionPane.showMessageDialog(this,"Erreur --> "+e.getMessage());
            }
        }

    l'exception n'est pas lancé donc je conclue que cela se passe que lorsque mon fichier est vide et à la ligne ObjectInputStream ois = new ObjectInputStream(fis); de ma fonction loadConsultation();. Ai-je mal utilisé les différentes classes de flux ? De plus une solution que je ne trouve pas propre pour éviter ce problème est de rajouté un if(f.length>0) avant d'aller lire et importer les données de mon fichier. Dans ce cas la je n'ai pas le problème cependant je trouve cette méthode trop brut.



    J'essaye de comprendre pourquoi et comment ça se fait que j'ai ce soucis lorsque mon fichier est vide et auriez vous une solution plus propre qu'un if(f.length>0) ?



    Merci à vous.

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    testes si le fichier est vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while( fis.available() > 0)
    {
       consultationV =(Vector<Consultation>) ois.readObject();
    }
    eric

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Déjà on affiche la stacktrace plutôt que son message. Cela permet de savoir à quelle ligne a eu lieu l'erreur. Sans ça difficile de résoudre le problème. Tu as un NullPointerException mais va savoir où. Reviens nous avec la stacktrace de ton exception.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Bonjour merci de vos réponses,

    Citation Envoyé par jeffray03 Voir le message
    salut,
    testes si le fichier est vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while( fis.available() > 0)
    {
       consultationV =(Vector<Consultation>) ois.readObject();
    }
    Donc verifier si le fichier est vide comme je l'ai fait avec f.length>0 se fait. Mais est-ce que c'est propre ? Est-ce la seule méthode ?

    eric
    Citation Envoyé par tchize_ Voir le message
    Déjà on affiche la stacktrace plutôt que son message. Cela permet de savoir à quelle ligne a eu lieu l'erreur. Sans ça difficile de résoudre le problème. Tu as un NullPointerException mais va savoir où. Reviens nous avec la stacktrace de ton exception.
    Euh désolé je n'ai jamais utilisé de stacktrace. Voila ce que j'obtiens avec e.getStackTrace() :

    Erreur --> [Ljava.lang.StackTraceElement;@7b3300e5
    Erreur --> [Ljava.lang.StackTraceElement;@2e5c649

    Je ne sais par contre pas comment l’interpréter.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Essaye avec printStrackTrace plutot :

    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Essaye avec printStrackTrace plutot :

    Bonjour, voila ce que j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    java.io.EOFException
    	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2335)
    	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2804)
    	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)
    	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
    	at appAccueil.fenAccueil.loadPatient(fenAccueil.java:660)
    	at appAccueil.fenAccueil.<init>(fenAccueil.java:61)
    	at appServices.fenServices.<init>(fenServices.java:33)
    	at medecin.ApplicationMedecins.main(ApplicationMedecins.java:26)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de blocage lors de démarrage
    Par leo13 dans le forum Ordinateurs
    Réponses: 16
    Dernier message: 05/05/2006, 19h07
  2. [C#] Problème de Date lors d'un Insert
    Par BilTCD dans le forum ASP.NET
    Réponses: 5
    Dernier message: 22/08/2005, 16h02
  3. Réponses: 9
    Dernier message: 31/05/2005, 10h05
  4. [Exception]Lors d'un validate sur un jframe
    Par cameleon2002 dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 02/05/2005, 11h27
  5. [JDBC] SQL Exception lors d'une Query !
    Par Castagnems dans le forum JDBC
    Réponses: 5
    Dernier message: 30/04/2004, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo