проблема с аргументами при запуске jar с использованием отражения

Я пытаюсь запустить банку, используя отражение с помощью метода 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/, но с пробелом между ними ??

Любая идея, что происходит?

Дэйвид


person dm76    schedule 03.02.2010    source источник
comment
Не видя, как выглядит DioscuriFrame, мы не можем знать   -  person skaffman    schedule 03.02.2010


Ответы (3)


Возможно, если мы посмотрим на ваш метод main и, в частности, на способ управления аргументами, мы сможем помочь вам лучше...

Обратите внимание, что когда вы запускаете свой основной класс с помощью команды java ... -a -c ./config/param.xml, у вас есть 3 аргумента в вашем методе main(String[] args):

public static void main(String[] args) {
    for (String s : args) {
        System.out.println("-> '" + s + "'");
    }
    ...

будет отображаться:

-> '-a'
-> '-c'
-> './config/param.xml'
person Romain Linsolas    schedule 03.02.2010
comment
действительно, как и другие ответы, предполагают это! глупый я. Спасибо, парни - person dm76; 03.02.2010

String[] args = new String[3];
args[0] = "-a";
args[1] = "-c";
args[2] = "./config/param.xml"

Но, пожалуйста, предоставьте код, который вызывает исключение.

person Bozho    schedule 03.02.2010

-c и ./config/param.xml должны быть в отдельных элементах массива.

person Jim Garrison    schedule 03.02.2010