2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
實(shí)現(xiàn)插件架構(gòu)的正確方法是使用ServiceLoader類。但您的情況似乎要簡(jiǎn)單得多,因?yàn)槟腡est類只有一個(gè)靜態(tài)方法。
首先,main類的方法Test是static。這意味著不需要?jiǎng)?chuàng)建實(shí)例來調(diào)用它,因此您應(yīng)該刪除對(duì)pluginClass.newInstance().
其次,Java 中的方法是通過其簽名來定義的。 簽名由方法名稱和方法參數(shù)的類型來標(biāo)識(shí)。沒有帶簽名的方法main(),但有帶簽名的方法main(String[])。
您需要指定您請(qǐng)求的方法的完整簽名:
pluginClass.getMethod("main", String[].class);
最后,您可以調(diào)用它:
Method main = pluginClass.getMethod("main", String[].class);
main.invoke(null, new Object[] { new String[0] });
第一個(gè)參數(shù)為main.invokenull,因?yàn)樗且粋€(gè)static方法并且不需要特定的實(shí)例。

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("java -jar test.jar");
添加回答
舉報(bào)