Bonjour à vous,
j'essaie d’appeler une certaine méthode en fonction de son nom et de ses paramètres.
Donc je récupère les entrés de l'utilisateur et je regarde les arguments passés sous forme de commande.
Le problème vient au moment où l'argument est un int, j'ai un:
Pourtant si l'argument est un String j'ai pas de problème:java.lang.IllegalArgumentException: argument type mismatch
Ma méthode:
Merci d'avance de vos réponses
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 public void exec(String command){ String[] commandSplitted = command.split(" "); Object[] arg = {}; String method = null; for(String keys : commands.keySet()){ Integer diff = 0; String[] keysSplitted = keys.split(" "); if(keys.contains("#")){ // SI LA COMMAND CONTIENT UN ARGUMENT for(int k = 0; k < keys.length(); k++){ if(keys.charAt(k) == '#'){ diff++; // DETERMINATION DU NOMBRE DARGUMENT } } } boolean same = true; for(int i = 0; i < commandSplitted.length-diff; i++){ if(commandSplitted.length-diff <= keysSplitted.length){ if(!keysSplitted[i].equals(commandSplitted[i])){ same = false; // COMMANDE USER NE CORRESPOND PAS A CELLE INDEX } } } if(same && commandSplitted.length == keysSplitted.length){ // BONNE COMMANDE if(diff > 0){ // SI ARGUMENT CREATION DU TABLEAU DE PARAMETRE arg = new Object[diff]; for(int d = 0; d < diff; d++){ arg[d] = commandSplitted[commandSplitted.length-d-1]; } } method = commands.get(keys); // ACCES AU NOM DE LA METHOD break; } } if(method != null){ for(int d = 0; d < server.getClass().getMethods().length; d++){ if(server.getClass().getMethods()[d].getName().equals(method)){ try { server.getClass().getMethods()[d].invoke(server, arg); // ERREUR ICI SI ARGUMENT ENTIER } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }else{ ServerSessionMumble.logger.warning("bad command !"); } }
Partager