2014-02-27 91 views
2

我在嘗試在代碼中執行特定的jar文件時遇到了問題。我的目標是創建GUI應用程序(嚮導),用戶在其中選擇各種XML文件,選擇要執行的jar文件併爲其提供輸入xml。當在代碼中執行jar時java.lang.NoSuchMethodException

要執行罐子,我使用此代碼: 1: URL[] urls = fillUrls(); 2: loader = new URLClassLoader(urls); 3: Class<?> cls = loader.loadClass(className); 4: Method execute = cls.getDeclaredMethod(methodName, Properties.class, StringBuffer.class, StringBuffer.class, IContext.class); // method name is declared as: // private final String methodName = "execute";

方法fillUrls上線,其通過執行所需的罐執行罐子和其他庫的1名返回的URL來運行。如果省略,第3行將引發異常。當方法到達第4行時,拋出java.lang.NoSuchMethodException。

奇怪的是,在jar中執行的類實現了一個接口,所以沒有機會不會有這樣的方法。爲了使它更有趣,我用於測試的jar文件運行完美,由其他人提供的罐子不會...

所以它可能是我的代碼有問題,或者它是如何的問題文件輸出?有什麼方法可以證明嗎?導出的jar來自maven2項目。

回答

1

這可能幫助:

裝載機=新URLClassLoader.newInstance(網址);

+0

這應該如何幫助?它只會產生「URLClassLoader.newInstance無法解析爲類型」錯誤。另外,我想問題的原因是在第4行。 – dallows

+1

newInstance是URLCLassloader的靜態方法,如果您安裝了安全管理器,則正在調用securityManager.checkPackageAccess。 –

0
cls.getDeclaredMethod(methodName, Properties.class, 
        StringBuffer.class, StringBuffer.class, IContext.class); 

拋出NoSuchMethodException如果找不到匹配的方法。

Class(您提供的類名)中沒有這樣的方法,並且按照聲明的順序給定方法名和方法的形式參數類型 (Properties.class,StringBuffer.class, StringBuffer.class, IContext.class)

+0

好吧,該方法應該在連接器中,但我不太確定正式參數的順序。 – dallows

+0

你可以檢查方法的類源代碼嗎? – Keerthivasan

+0

我剛剛發現,他們重新班級。現在它擴展了兩個其他類而不是實現資源。但是這兩個類都被添加到類加載器中。它是否改變了我應該如何執行該方法? – dallows