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 :

[Reflexion] Pb méthode invoke


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut [Reflexion] Pb méthode invoke
    Bonjour

    voilà, j'expose mon problème qui concerne la méthode invoke

    j'ai dans une classe nommée TheFactoriesIndices une méthode :

    public static final Indice createIndice(String type,String ...params)

    qui utilise donc l'arité variable
    ------

    Mais ceci ne fonctionnent pas quand on utilise ce qui suit :

    m=classe.getMethod((((Element)lesIndices.get(i)).getChild("nomMeth")).getText(),lesClasses);
    m.invoke(classe,(Object[])args);

    sachant que lesIndices.get(i)).getChild("nomMeth") renvoit bien la chaîne de caractères "createIndice"
    que ts le tableau Classe lesClasses[] est affecté, notamment, par Class.forName("java.lang.String");

    ------

    J'ai comme message d'erreur :

    java.lang.NoSuchMethodException: indices.TheFactoriesIndices.createIndice(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
    at java.lang.Class.getMethod(Unknown Source)


    -----

    Et pourtant j'ai bien un package indices, dans lequel se trouve la classe TheFactoriesIndices avec une méthode createIndice !

    Je ne comprends vraiment pas. Alors que ça fonctionne avec d'autres méthodes. Cela provient-il de l'utilisation de l'arité variable.
    Existe t-il une solution ?

    En espérant avoir donné assez d'éléments,
    merci pour vos réponses

  2. #2
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    Alors le probleme vient du fait que le second parametre est String...params.
    Et si tu affiche params.getClass().getName(), tu veras que ce n'est pas "java.lang.string" qui va apparaître mais "[Ljava.lang.String;" donc si tu veux récupérer ta méthode, il faut que ce soit cette Class qu'il faut mettre dans ton tableau lesClasses.

    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    try{
           Class c1 = Class.forName("[Ljava.lang.String;");
           System.out.println(c1.getName());
           lesClasses[0] = String.class;         
           lesClasses[1] = c1;            
     m= classe.getMethod((((Element)lesIndices.get(i)).getChild("nomMeth")).getText(),lesClasses);   
    m.invoke(classe,(Object[])args);
        }catch(Exception e)
       {
           e.printStackTrace();
       }
    ca devrait marcher.

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    J'avais eu le même problème et celui-ci venait effectivement de l'utilisation de l'arité variable.
    Après moult tentatives j'ai trouvé la solution (qui en définitive est très logique ).
    La methode invoke attend un tableau d'objet contenant les paramètres de la methode originale. En fait il faut considérer l'arité variable comme un tableau (ce qui est le cas quand on la traite dans la methode). Donc tu dois créer un tableau d'objet (de taille 2 dans ton cas) puis y affecter, à l'indice qui va bien, le tableau représentant l'arité variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Object []os = new Object[2];
    os[0] = type; // le premier paramètre à passer à la methode createIndice
    os[1] = params; // le tableau de String représentant l'arité variable
    m=classe.getMethod((((Element)lesIndices.get(i)).getChild("nomMeth")).getText(),lesClasses);
    m.invoke(classe, os);
    Voilà, ceci avait résolu le problème dans mon cas et devrais résoudre le tien

    [edit]grillé[/edit]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    En fait non pas si grillé que ça, toi tu lui donne la réponse au problème qui va survenir après avoir utilisé ma méthode !

    Vu son message d'erreur, le probleme vient de la methode getMethof(...), mais maintenant avec le code que tu lui a donné il devrait pu avoir de problème !!!
    quelle complémentarité !

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par Scorpyosis
    quelle complémentarité !
    Oui ^^

    Mais pour être franc, j'avais lu le post un peu en diagonale et cela m'a directement fait penser au problème que j'avais rencontré d'où ma réponse.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Un grand merci à vous deux ! Ca fonctionne

    Vous ne pouvez savoir comment je suis enchanté



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

Discussions similaires

  1. problème de paramètre count dans la méthode invoke
    Par ojhoj dans le forum Windows Forms
    Réponses: 8
    Dernier message: 19/03/2011, 09h57
  2. Réponses: 4
    Dernier message: 14/02/2011, 10h16
  3. Utilisation de la classe Méthod et de la méthode Invoke
    Par peche dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 12/04/2010, 15h49
  4. Réponses: 8
    Dernier message: 19/06/2006, 15h31
  5. [VB.NET 1.1] [Thread] Méthode invoke
    Par toniolol dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/02/2006, 16h04

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