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

Langage Java Discussion :

[reflexivité] Méthode non trouvé


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 11
    Par défaut [reflexivité] Méthode non trouvé
    Bonjour,

    Alors je vous explique tout d'abord le contexte:

    Il y a une application qui permet d' accueillir des plugins et un plugin que je suis entrain de développer.
    Le plugin est un outil qui permet de tester des pages web, on peut ajouter des tests sans ajouter une ligne de code dans le plugin car il y a un système qui parse le jar du plugin et voit chaque classe de test. Je charge ces classes dans la JVM, je les instancie et ensuite j'appel des méthode qui sont définit par une classe abstraite (pour executer le test, changer la langue et récupérer la description textuel du test).

    J'arrive à lancer le plugin dans l'application, la méthode de changement langue marche bien, de même pour celle qui renvoit la description mais au moment où je souhaites executer un test il ne trouve pas la méthode (par exemple wa11y.tests.rgaa22.cadres.Cadres01.controle(wa11y.tests.util.Message) c'est pourtant les bon package ).

    Mais le plus bizzard c'est quand je lance mon plugin tous seul les tests s'exécutent bien mais quand le plugin est lancé de l'application ils ne se lancent pas...


    Code pour récupérer la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Message[] mess = new Message[1];
                    mess[0] = (Message) param;
     
                    System.out.println("debut de recup methode controle(Message)  "+test.getClass().getName());
     
                    Method control=null;
     
     
                    Class[] classParam = new Class[1];
                    classParam[0]=Message.class;
     
                    try{
                    control = test.getClass().getMethod(methodeName, classParam);
                    }catch (Exception e){
                        System.out.println(e.toString());
                    }
                    System.out.println("Fin recup, debut invoke");
     
                    Message messageResult = (Message) control.invoke(test, mess);
    Déclaration de la methode abstraite dans la classe abstraite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public abstract Message controle(Message m);
    Exemple pour de la méthode controle pour la classe Cadres01 qui hérite de la classe abstraite ControleRGAA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    package wa11y.tests.rgaa22.cadres;
     
    import org.w3c.dom.Element;
     
    import wa11y.tests.rgaa22.ControleRGAA;
    import wa11y.tests.util.Message;
     
    /**
     * @version 1.1
     * @author (version 1.1)Licence Professionnelle S2IMa 10-11
     * 
     * @Project : WA11Y
     * @License : Cecill-c
     * 
     * RGAA22 Control class. Check if title attribute in frame or iframe is relevant 
     */
    public class Cadres01 extends ControleRGAA{
     
    	private Message message;
    	/**
             * Constructor
             * 
             * @param url, String
             */
    	public Cadres01(String url) {
    		super(url);
     
    	}
     
    	/**
             * Check title attribute in "iframe" and "frame"
             * 
             * @return result, int, 0 if NOK, 2 if NA, 3 if operator check is needed
             */
    	public Message controle(Message m) {
                System.out.println("Controle de Cadres01");
    		this.message=m;
    		if (message==null) {
    			message=new Message();
    			message.setTestResult(NA);
    		}
     
    		//int result = NA;
    		String tag = "frame";
    		String tag2 = "iframe";
    		String attribut = "title";
    		try {
    			array = dom.getDataByBalise(tag);
    			array.addAll(dom.getDataByBalise(tag2));
    			value = "";
    			Element elem;
    			for (int i=0; i < array.size() ;i++){
    				elem = array.get(i);	
    				if (elem.getAttribute(attribut).length()>0 && message.getTestResult() != NOK){
    					message.setTestResult(OK);
    					value += "\n " + attribut + "=\"" + elem.getAttribute(attribut) +"\"" ;
    				} else message.setTestResult(NOK);
    			}
    			System.out.println("value=>"+value);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return message;
    	}
     
    }
    Merci pour vos réponses

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourriez vous nous donnez l'exception que vous avez, avec son stacktrace complet svp?

  3. #3
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 11
    Par défaut
    Voila:

    java.lang.NoSuchMethodException: wa11y.tests.rgaa22.cadres.Cadres01.controle(wa11y.tests.util.Message)
    Fin recup, debut invoke
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at wa11y.ihm.model.Engine.executeMethodTest(Engine.java:160)
    at wa11y.ihm.model.Engine.runTest(Engine.java:216)
    at wa11y.ihm.controller.Controller.actionPerformed(Controller.java:57)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
    at java.awt.Component.processMouseEvent(Component.java:6267)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6032)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourriez vous afficher ceci dans la console?:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(test.getClass().getClassLoader().forName("wa11y.tests.util.Message")+" VS " +Message.class);
    Je pense que le classloader de votre plugin vois une classe Message différente de celle que vous passez en paramètre de l'appel à getMethod().

    Ceci arrive si vous avez inclu la classe Message dans le classloader principal de votre application, mais aussi dans le classloader de votre plugin, et que le classloader du plugin ne respecte pas le modèle de délégation de J2SE.

  5. #5
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 11
    Par défaut
    Voila le résultat:
    class wa11y.tests.util.Message VS class wa11y.tests.util.Message

    parcontre j'ai utilisé la méthode loadClass() à la place de forname() s'utilise sur un Object Class, pas sur un ClassLoader

    Mais le conflit de ClassLoader me parait être une bonne piste, car je me suis rendu compte que la station de plugin chargé toute les classes et que mon plugin charge lui aussi les classes pour faire des tests avec un ClassLoader.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    arf, je croyais que toString renverrais le hashcode:/

    essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Class c = test.getClass().forName("wa11y.tests.util.Message");
    Class c2 = Message.class;
    System.out.println(c+" VS " +c2+" same? "+(c==c2));
    System.out.println(c.getClassLoader()+" VS " +c2.getClassLoader()+" same? "+(c.getClassLoader()==c2.getClassLoader()));

Discussions similaires

  1. Méthodes non trouvées par Eclipse
    Par zenux dans le forum Eclipse C & C++
    Réponses: 0
    Dernier message: 10/08/2011, 22h43
  2. Méthode non trouvée
    Par koukou0687 dans le forum Hibernate
    Réponses: 16
    Dernier message: 14/04/2011, 09h21
  3. [Prototype] Méthode non trouvée
    Par Arnaud F. dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 31/07/2009, 15h24
  4. getOutputFile méthode non trouvée
    Par Kieda dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2008, 08h36
  5. Problème avec la méthode Buidmenu non trouvée
    Par franckjava dans le forum NetBeans
    Réponses: 2
    Dernier message: 17/01/2007, 00h45

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