je tente de lancer un pot en utilisant la réflexion avec le la getMethod et invoquer la méthode, mais a couru en difficulté avec les arguments passés à la méthode Invoke:avec des arguments lors de l'exécution d'un pot en utilisant la réflexion
String mainClass = myprog.Run;
String[] args = new String[2];
args[0] = "-a";
args[1] = "-c ./config/param.xml"
ClassLoader classLoader = createClassLoader(getClassPath());
// Invoke the method
setContextClassLoader(classLoader);
Class<?> theClass = classLoader.loadClass(mainClass);
theClass.getMethod("main", String[].class).invoke(null, (Object) args);
et je reçois cette erreur:
[java] java.lang.reflect.InvocationTargetException
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at eu.keep.util.JarRunner.run(Unknown Source)
[java] Caused by: java.lang.RuntimeException: config file 'param.xml' does not exist in folder '/home/user/ ./config'
[java] at dioscuri.DioscuriFrame.<init>(Unknown Source)
[java] at dioscuri.DioscuriFrame.main(Unknown Source)
[java] ... 5 more
Comme vous pouvez le voir sur la stacktrace, il tente d'accéder au fichier « param.xml » du dossier '/ home/user/./config.
De toute évidence, si l'espace entre '/ home/user /' et './config' n'était pas là, tout irait bien. Je suis confus avec le fait que j'ai codé en dur les arguments dans String [] args et le second est "-c ./config/param.xml" et il ressemble au répertoire à partir duquel l'application est en cours d'exécution, ie/home/user /, est concaténé avec ./config/ mais avec un espace entre?
Une idée de ce qui se passe?
David
Sans voir à quoi ressemble 'DioscuriFrame', il n'y a aucun moyen de savoir – skaffman