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

Entrée/Sortie Java Discussion :

Problème de ClassNotFoundException


Sujet :

Entrée/Sortie Java

  1. #1
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut Problème de ClassNotFoundException
    Bonjour,

    j'ai créé une application qui charge et enregistre ses données à travers le système de sérialisation JAVA.
    La structure de données, contient aussi bien des variables simples (int), que des classes.
    Tout fonctionne bien jusque là.

    Ensuite j'ai créé une autre application, qui est en fait une version moins sophistiquée de l'application précédente. La structure de données est strictement la même, et le système d'enregistrement et sauvegarde de celles-ci est une copie conforme de la 1ère application.

    Pourtant, lorsque qu'avec l'application allégée, je tente de charger un fichier de données créé par la 1ère application, elle charge correctement les variables simples, mais dès qu'il s'agit d'une classe, j'obtiens un exception du type ClassNotFoundException.

    Avez-vous une idée de la raison de ceci, et surtout de comment faire pour résoudre ce problème ?

    Merci
    @ bientôt...

    Salut & @+ sur 3W!

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Les classes sérialisées sont-elles présentes dans la version légère ? Si non, ajoute les.

    Généralement, quand tu fais deux applications distinctes utilisant les mêmes classes, le mieux est de faire une "lib" regroupant les classes utilisées par les deux, et importée cette lib dans les deux projets.

  3. #3
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour et merci pour cette réponse.
    Mais franchement je ne comprends pas ce blocage. Tout est identique:
    # La classe principale des 2 applications, où se trouve main(), s'appelle C_Projet.
    # La classe qui gère les données s'appelle C_GestionDonnees pour les 2 applications.
    # Ces 2 classes se trouve dans un pack qui s'appelle pckCommun.
    J'ai fait un copié-collé du code de C_GestionDonnees, du 1er projet vers le second projet.

    Rien ne permet de les distinguer l'une par rapport à l'autre, si ce n'est que ce n'est pas le même projet.
    Ce qui m'intrigue le plus, c'est qu'il semble qu'on ne peut pas faire une application qui utiliserait le même type de fichier qu'une précédente application ??!
    Cela semble absurde, car comment est-il possible alors, que des logiciels soient capables de lire des fichiers créés par des versions antérieures ?
    @ bientôt...

    Salut & @+ sur 3W!

  4. #4
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Ce n'est pas les classes qui gèrent la sérialisation ou qui lance l'application, mais les classes sérialisées. De plus, lorsque tu sérialises, tu peux y perdre en compatibilité. Imagine que tu enregistres un objet dans un fichier, que tu modifies la classes (tu enlèves / ajoutes des champs) et tu tentes de lire le fichier. Que va t-il se passer pour le remplissage de champs inexistants ?

    Une solution est d'implémenter l'interface Exterrnalizable qui va te forcer à décrire le processus de sérialisation. C'est à dire que tu réalises l'écriture des données et la récupération.

    Maintenant, assure toi que les classes mises dans le fichier soient bien présentes dans les deux applications, celles qui sont sérialisées (et que tu as mises Serializable).

  5. #5
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Merci pour cette aide. En lisant votre réponse, j'ai eu un déclic...

    Bien sûr que toutes les classes mises dans le fichier sont présentes dans l'application allégée... sauf que le second projet étant plus simple de construction, j'ai tout laissé dans le package par défaut.

    Or dans l'application initiale, la classe de données se situe dans un package nommé pckCommun. Et je suppose que cette information est incluse dans le fichier de données. Ce qui expliquerait pourquoi dans la version allégée de l'application, il y a échec lorsque la classe C_GestionDonnées cherche à charger des éléments estampillés pckCommun.C_GestionDonnees.

    Alors je viens de transférer tout le projet "allégé" dans un pack pckCommun... et là miracle, il n'y a plus d'exception !!

    J'ai galéré avec cette affaire, mais je viens d'en apprendre encore une bonne aujourd'hui.

    Merci.
    @ bientôt...

    Salut & @+ sur 3W!

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

Discussions similaires

  1. Problème tSas_Input (classNotFoundException) uniquement dans le Job Conductor
    Par francois59496 dans le forum Exécution et industrialisation
    Réponses: 2
    Dernier message: 06/10/2014, 09h28
  2. [jBPM] Problème de ClassNotFoundException
    Par bil.dev dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 29/05/2009, 01h52
  3. java.lang.ClassNotFoundException Sitemesh problème
    Par reneguenon dans le forum Struts 1
    Réponses: 6
    Dernier message: 13/10/2008, 12h21
  4. [HSQLDB] Problème de ClassNotFoundException
    Par Nadd dans le forum JDBC
    Réponses: 2
    Dernier message: 03/08/2008, 11h50
  5. Java - firebird et problème de ClassNotFoundException
    Par bard123 dans le forum Firebird
    Réponses: 1
    Dernier message: 27/06/2008, 15h47

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