Bonjour,
(je suis nouvelle sur le forum, j'espère ne pas avoir créé n'importe quoi n'importe où..)
Alors voilà, je suis entrain de faire une calculette comportant plusieurs boutons correspondant aux fonctions de la classe Math.
Mon problème c'est au niveau de l'appel dynamique de la fonction (du bouton) choisie.
J'ai un ActionListener sur mes boutons, et donc une fonction actionPerformed pour écouter/déclencher tout ça, là voici :
Puis ma fonction calculer :
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 public void actionPerformed(ActionEvent e) { JButton boutonClic = (JButton)e.getSource(); Class c = this.getClass(); System.out.println(boutonClic.getText()); //affiche le nom de la methode (du bouton) System.out.println(c.getName()); //affiche la classe try { Class [] param = c.getClass().getMethod(boutonClic.getText()).getParameterTypes(); calculer(c, param, boutonClic.getText()); } catch (SecurityException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (NoSuchMethodException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }
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 public void calculer(Class c, Class[] args, String nomMethode){ Class[] paramTypes = null; if(args != null){ paramTypes = new Class[args.length]; for(int i=0;i<args.length;++i){ paramTypes[i] = args[i].getClass(); } } Method m; try { m = c.getClass().getMethod(nomMethode,paramTypes); Double val = new Double(this.valeur.getText()); System.out.println(val); Double result = (Double)m.invoke(c,args); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { System.out.println("No such Method"); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Bon, alors ça marche pas du tout, j'ai surtout et toujours l'erreur NoSuchMethod, malgré tout ce que j'ai lu et essayé.. rien à faire, je bloque !
Je sais qu'il faut que j'arrive à récupérer (pour mon invoke) : une classe (je sais pas la quelle), un tableau avec les types des arguments de la methode et le nom de ma methode.
Je dois peut être préciser que les fonctions (boutons) ne retourne que des doubles et n'ont qu'un seul argument...
Si vous avez des conseils ils seront les bienvenues, biensûr je suis pas une pro alors si vous pouvez être assez simples dans vos explications
Merci d'avance !
Partager