運行一個罐子當爭吵我嘗試使用與實現getMethod反射運行一個罐子,調用方法,但在傳遞給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 []參數中,第二個參數是「-c ./config/param.xml」,它看起來像應用程序運行的目錄,即/ home/user /,與./config/連接,但在兩者之間有一個空格?
任何想法發生了什麼?
大衛
沒有看到'DioscuriFrame'的樣子,我們沒有辦法知道 – skaffman