0

getMethod と invoke メソッドでリフレクションを使用して jar を実行しようとしましたが、invoke メソッドに渡された引数で問題が発生しました。

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

スタックトレースからわかるように、フォルダ「/home/user/./config」からファイル「param.xml」にアクセスしようとしています。

明らかに、「/home/user/」と「./config」の間にスペースがなければ、問題ありません。

引数を String[] args にハードコーディングし、2 番目の引数が「-c ./config/param.xml」であり、アプリが実行されているディレクトリ、つまり /home/ のように見えるという事実に混乱しています。 user/ は ./config/ と連結されますが、間にスペースが入ります ??

何が起こっているのですか?

デビッド

4

3 に答える 3

1

-cとは./config/param.xml別々の配列要素にある必要があります。

于 2010-02-03T17:28:58.073 に答える
1
String[] args = new String[3];
args[0] = "-a";
args[1] = "-c";
args[2] = "./config/param.xml"

ただし、例外の原因となるコードを提供してください。

于 2010-02-03T17:26:43.663 に答える
1

おそらく、あなたのメソッド、特に引数の管理方法を調べれば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'
于 2010-02-03T17:28:50.207 に答える