Creation dynamique de Class a partir d'un fichier .class

Creation dynamique de Class a partir d'un fichier .class - Java - Programmation

Marsh Posté le 29-04-2005 à 23:45:54    

Bonjour,
 
J'ai un programme Java qui me permet de scanner un repertoire et ses sous repertoires recursivement et de recuperer tous les fichiers .class
 
Certains de ces fichiers appartiennent a des paquetages et d'autres non.
Je voudrais savoir comment faire pour créer un objet a partir du nom de ce fichier xxx.class
 
Je suppose que je dois recuperer d'abord une class et de creer une nouvelle instance de cette classe (un peu comme avec la methode class.forName(String s) )
Mais je vois vraiment pas comment faire.
Si vous aviez une idée , ca me sauverait :p
Merci d'avance

Reply

Marsh Posté le 29-04-2005 à 23:45:54   

Reply

Marsh Posté le 30-04-2005 à 01:36:03    

*rien compris*


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-04-2005 à 02:14:45    

j'ai une classe avec un main dedans.
Dans ce main , je recupere tous les fichiers d'un repertoire
Je filtre ces fichiers pour n'avoir que les fichiers compilé java (*.class)
Je voudrais créer des instances de ces fichiers .class

Reply

Marsh Posté le 30-04-2005 à 02:17:42    

oui, et? c'est quoi ton problème ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-04-2005 à 02:40:42    

bah je sais pas comment faire pour creer ses fameuses instances...
Quel objet je dois utiliser pour faire ca...

Reply

Marsh Posté le 30-04-2005 à 03:10:15    

eh bien, dans ton premier post, tu parles de Class.forName(), tu as lu la javadoc?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-04-2005 à 10:11:55    

Voila je vais expliquer en details :
J'ai un projet admettons dans mon home /home/moi/projet/
Dans /home/moi/projet/src/ j'ai mes sources
Dans /home/moi/projet/classes/ j'ai mes fichiers classes (*.class)
Je fais un scan de fichiers a partir de mon /home/moi/projet/
en recuperant tous les fichiers *.class (donc ceux qui se trouvent dans mon /home/moi/projet/classes
 
Ces fichiers correspondent donc a des fichiers bytecode java (des fichiers semi compiles prets a etre executé par la jvm)
 
Maintenant je voudrais savoir comment faire pour créer l'objets correspondant a chaque fichier *.class
Le Class.forName(String s) me permet de construire un objet a partir d'une chaine de caracteres , il faut donc lui passer paquetage1.souspaquetage.MonObjet et la il cré la Class associé a mon objet. Or ici ce n'est pas le cas, car a priori je ne connais qu'un path d'un fichier .class (ex : "classes/MonObjet.class" ) et donc je ne connais pas a priori la string qui correspondra a nom du paquetage de l'objet... Je ne peux donc pas y appliquer la methode Class.forName(). Je pourrais utiliser Class.forName() si tous les objets n'etait pas inscrit dans des paquetages et recuperant juste "MonObjet" et en le passant a Class.forName().
 
En gros ,c'est pour un systeme de plug ins, on pourra i rajouter des fichiers *.class n'importe ou dans la racine de mon projet , ces fichiers *.class pourront appartenir ou non a des paquetages. et mon programme devra charger l'objet correspondant dynamiquement... Donc le Class.forName() ne peut pas s'appliquer dans tous les cas :'(
Je voudrais juste savoir comment faire? :p merci  

Reply

Marsh Posté le 30-04-2005 à 11:20:05    

en^même temps, si tes classes sont dans des packages, il serait logique qu'elles soient dans des sous-repertoire correspndant au package :  
truc.toto.Machin => classes/truc/toto/Machin.class
 
si c'est pas le cas, le chargement via classpath ne fonctionnera pas. Il doit y a avoir moyen de charger les classes manuellement en utilisant defineClass() de la classe ClassLoader. Moi je ne l'ai jamais fait...
 
http://java.sun.com/j2se/1.4.2/doc [...] oader.html
 
je serais toi, j'imposerais la fourniture des plug-ins sous la forme de Jar (=> qui respecteraient l'architecture de repertoire)
 
y avait eu un sujet où on avait discuté de ca avec veryfree.
J'avais fait un bout de code...
Tu pourras peut être t'en inspirer :  
http://forum.hardware.fr/forum2.ph [...] 44#t522503


Message édité par benou le 30-04-2005 à 11:23:06

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-04-2005 à 11:34:36    

Merci Benou, Je regarde le code, j'essaye de l'adapter et je donne des news si ca marche :p

Reply

Marsh Posté le 30-04-2005 à 11:37:23    

cyrax_bfp a écrit :

Merci Benou, Je regarde le code, j'essaye de l'adapter et je donne des news si ca marche :p


ok.
je me souviens plus si je l'avais testé => je ne garantis rien ;)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-04-2005 à 11:37:23   

Reply

Marsh Posté le 30-04-2005 à 13:09:42    

ben si c'est pour un systeme de plugins, en plus, tu peux pas instancier toutes les classes au hasard comme ça; il te faut au minimum un descripteur et/ou une interface à implementer; et y'a qques projets qui font ça pour toi


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 23-02-2013 à 20:28:08    

the real moins moins a écrit :

ben si c'est pour un systeme de plugins, en plus, tu peux pas instancier toutes les classes au hasard comme ça; il te faut au minimum un descripteur et/ou une interface à implementer; et y'a qques projets qui font ça pour toi


 
Bonsoir, j'ai un probléme lors de l'instanciation d'une class avec un classloader. le nouveau classloader arrive à trouver la class mais il n'arrive pas à l'instacier.  
Merci pour votre aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed