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

API standards et tierces Java Discussion :

[ClassLoader] Chargement dynamique d'une classe -> problème avec packages ! [Sources]


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut [ClassLoader] Chargement dynamique d'une classe -> problème avec packages !
    Bonjour,

    je développe actuellement un programme qui doit permettre de charger une classe (j'ai redéfini un ClassLoader pour cela) dont le fichier .class est selectionné par l'utilisateur via une JFileChooser.

    Exemple de classe chargée :

    C:/exemple/HelloWord.class

    Le chemin passé au ClassLoader est C:/exemple/ et le nom de la classe HelloWord

    Ceci fonctionne très bien lorsque la classe ne fait pas partie d'un package (comme c'est le cas ici). En revanche, lorsqu'elle fait partie d'un package, cela plante !

    Exemple :

    C:/exemple/monPackage/HelloWord.class

    Le chemin passé au ClassLoader est C:/exemple/monPackage/ et le nom de la classe HelloWord alors que le chemin devrait être C:/exemple/ et le nom de la classe monPackage.HelloWorld pour que çà fonctionne !

    Y'a t'il un moyen de récupérer le (les) package(s) au(x)quel(s) appartient une classe ?
    Ceci me permettrait de concaténer le (ou les) nom(s) du (des) packages séparé(s) par un (des) '.' au nom de la classe et de remonter d'autant de niveaux que de packages avant de passer le chemin au ClassLoader.

    Peut etre, récupérer directement dans le .class, le nom du (ou des) package(s) ? Mais comment savoir ou se situe cette information ? Une autre idée sinon ?

    Toutes vos réponses seront les bienvenues, je me casse la tête depuis pas mal d'heure dessus déjà

    Merci d'avance

  2. #2
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Pourquoi ne pas imposer des noms de fichier type (avec le package+classe) : style les fichiers "mon.package.MonFichier.class", dans le répertoire C:/exemple/ ?!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Merci !

    En effet çà peut etre une solution mais trop contraignante car on est obligé d'avoir des noms de fichiers .class correctement formaté par l'utilisateur.

    Genre, si la classe HelloWorld fait partie du package exemple et que le fichier qu'il selectionne se nomme HelloWorld.class ben ca va planter car ca devrait etre exemple.HelloWorld.class.

    L'idéal serait de pouvoir récupérer directement dans le fichier .class, le nom des packages mais je ne vois pas comment faire

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Hum comment dire ca .. tu va devoir faire ca a la mimine je crois

    Voici un lien decrivant le format des .class: http://java.sun.com/docs/books/vmspe...sFile.doc.html

    Bonne lecture,

    Bulbo

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Merci !

    Je vais etre le pionnier dans la récupération d'un nom de package dans un fichier .class ? Non je le crois pas lol.

    Personne ne l'a déjà fait ?? Vraiment ?

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Si moi mais je sais pas ou j'ai colle mon source .. c'est un peu le bazard chez moi.

    Eventuellement si tu es vernis je te posterai un truc

    souhaite toi bonne chance,

    Bulbo

  7. #7
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par ymerej
    L'idéal serait de pouvoir récupérer directement dans le fichier .class, le nom des packages mais je ne vois pas comment faire
    Bah si tu as un moyen de leur faire charger à la volée le fichier ".java" (qui est un fichier texte en fait), au lieu du ".class" : alors le tour est joué!

    Sinon tu peux imposer que tous les répertoires se retrouvent dans un dossier <<type>> ; comme "C:/exemple/mespackages/fr.application.HelloWorld.class" dans le cas d'une classe "HelloWorld" du package "fr.application" dans le dossier "C:/exemple" avec le sous-répertoire "mespackages" pour délimiter les parties du système-de-fichier et hiérarchie-de-package... il ne te reste plus qu'à remplacer tous les "/" par des "." dans la fin du chemin après "mespackages" ?

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Bon finalement tu as ete plus vernis que prevu

    J'ai pas retrouve ton code mais j'avais du temps a tuer au boulot.

    La classe ClassInfo en attachement fait ce que tu veux.

    Amuses-toi bien,

    Bulbo

    PS: Cette classe sera rajoutée a la page source si tu la cherches plus tard..
    Fichiers attachés Fichiers attachés

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup pour vos réponses !

    Je vais plonger la dedans ce soir et vous tiens au courant.

    Bonne soirée

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Nickel !!!

    Exactement ce que je voulais.

    Merci beaucoup bulbo.

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

Discussions similaires

  1. [2.x] Chargement dynamique d'une classe
    Par khand dans le forum Symfony
    Réponses: 8
    Dernier message: 01/03/2012, 15h23
  2. Réponses: 2
    Dernier message: 25/10/2005, 18h03
  3. [Classpath][Classloader]Chargement dynamique de classes
    Par vberetti dans le forum Général Java
    Réponses: 9
    Dernier message: 08/07/2005, 12h11
  4. [CR.NET]Chargement dynamique d'une image
    Par Moah dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 14/12/2004, 11h46
  5. Réponses: 19
    Dernier message: 26/04/2004, 08h54

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