Invocation dynamique de méthode

Invocation dynamique de méthode - Java - Programmation

Marsh Posté le 17-12-2004 à 15:00:53    

Bonjour,
j'ai un problème avec la méthode invoke().
Je veux appeler la méthode main d'une classe dont je récupère le nom en base de données.  

Code :
  1. String parametre = "toto.txt";
  2. String nomDeMaClasse = "maClasse";
  3. Class.forName(nomDeMaClasse).getMethod("main", new Class[]{String[].class}).invoke(null, new Object[]{parametre});


 
Le code de ma classe :
 

Code :
  1. public class maClasse
  2. {
  3. public maClasse()
  4.   {
  5.    ...
  6.   }
  7. public static void main(String args[])
  8. {
  9.    ...
  10. }
  11. }


 
Là où ça ne passe pas c'est avec les arguments. Je voudrais passer un paramètre à ma méthode main, mais à ce moment j'ai une exception IllegalArgumentException, le type de mon argument ne correspond apparemment pas.
Alors que si je déclare ma fonction main sans arguments et si je fais  

Code :
  1. Class.forName(nomDeMaClasse).getMethod("main", null).invoke(null, null);


et ben là ça passe.
Quelqu'un peut m'aider siouplait ?

Reply

Marsh Posté le 17-12-2004 à 15:00:53   

Reply

Marsh Posté le 17-12-2004 à 15:13:29    

Class.forName(nomDeMaClasse).getMethod("main", new Class[]{String[].class}).invoke(null, new Object[]{new String[]{parametre}});
 
 
(introduit qques variables, ça sera un poil plus lisible)


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

Marsh Posté le 17-12-2004 à 15:27:08    

the real moins moins a écrit :

Class.forName(nomDeMaClasse).getMethod("main", new Class[]{String[].class}).invoke(null, new Object[]{new String[]{parametre}});
 
 
(introduit qques variables, ça sera un poil plus lisible)


 
(Je poste pour qq'un d'autre dont l'inscription est pas validée depuis hier, si un modo ou un admin passe dans le coin... c'est lapin21 :o)
 
Je vois pas trop où rajouter des variables en fait, c'est assez illisible à la base [:petrus75]

Reply

Marsh Posté le 17-12-2004 à 16:23:23    

up :bounce:
 
C'est trop illisible ou personne n'a jamais eu le problème ?

Reply

Marsh Posté le 17-12-2004 à 16:49:18    

euh je viens de te donner la reponse [:mlc]


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

Marsh Posté le 17-12-2004 à 19:11:32    

en java <= 1.4 :

Code :
  1. Class c = Class.forName(nomDeMaClasse);
  2. Class[] methodParamType = new Class[]{String[].class};
  3. Method m = c.getMethod("main", methodParamType);
  4. //String[] paramValue =  à toi de voir ...
  5. Object[] methodParamValue = new Object[]{paramValue};
  6. m.invoke(null, methodParamValue);


 
en java1.5 :

Code :
  1. Class c = Class.forName(nomDeMaClasse);
  2. Method m = c.getMethod("main", String[].class);
  3. //String[] paramValue =  à toi de voir ...
  4. m.invoke(null, paramValue );



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

Marsh Posté le 17-12-2004 à 19:12:48    

mais je viens de lui dire :o
le seul truc, donc, c'est qu'il passait un String au lieu d'un String[]


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

Marsh Posté le 17-12-2004 à 19:17:11    

the real moins moins a écrit :

mais je viens de lui dire :o


c'était pour montrer du java 1.5 [:petrus75]


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

Marsh Posté le 18-12-2004 à 12:55:56    

Merci à vous ;)
 
Désolé pour la première réponse, pas bien lu (c'était vendredi soir après tout :o)

Reply

Marsh Posté le 20-12-2004 à 15:27:22    

Merci beaucoup à the real moins moins, effectivement j'avais oublié un niveau... (et pour les variables ben... "on fait du java ou on n'en fait pas !"  :D )
Merci aussi à Zedar d'avoir posté pour moi.

Reply

Sujets relatifs:

Leave a Replay

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