Я пытаюсь запустить банку, используя отражение с помощью метода getMethod и вызова, но у меня возникли проблемы с аргументами, переданными методу вызова:
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);
и я получаю эту ошибку:
[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
Как видно из трассировки стека, он пытается получить доступ к файлу «param.xml» из папки «/home/user/ ./config».
Очевидно, что если бы пробела между '/home/user/' и './config' не было, все было бы в порядке.
Меня смущает тот факт, что я жестко закодировал аргументы в String[] args, а второй — «-c ./config/param.xml», и он выглядит как каталог, из которого работает приложение, т. е. /home/ user/, объединяется с ./config/, но с пробелом между ними ??
Любая идея, что происходит?
Дэйвид
DioscuriFrame
, мы не можем знать - person skaffman   schedule 03.02.2010