2016-03-07 53 views
0

我有一個jar文件,它是單獨的文件夾名爲lib,所以我想從那裏加載一個jar,如下面的代碼所示,但我得到的異常是畸形異常,請告知如何我可以糾正這個請大家指教在運行時通過java加載java類

import java.net.URL; 
import java.net.URLClassLoader; 
import java.net.MalformedURLException; 

public class JarFileLoader extends URLClassLoader { 
    public JarFileLoader(URL[] urls) { 
    super(urls); 
    } 

    public void addFile(String path) throws MalformedURLException { 
    String urlPath = "jar:file://" + path + "!/"; 
    addURL(new URL(urlPath)); 
    } 

    public static void main(String args[]) { 
    try { 
     System.out.println("First attempt..."); 
     Class.forName("org.apache.poi.ss.usermodel.HssfSheet"); 
    } catch (Exception ex) { 
     System.out.println("Failed."); 
    } 
    try { 
     URL urls[] = {}; 
     JarFileLoader cl = new JarFileLoader(urls); 
     cl.addFile("/lib/poi3.10final.jar"); 
     System.out.println("Second attempt..."); 
     cl.loadClass("org.apache.poi.ss.usermodel.HssfSheet"); 
     System.out.println("Success!"); 
    } catch (Exception ex) { 
     System.out.println("Failed."); 
     ex.printStackTrace(); 
    } 
    } 
} 
+1

你能複製/粘貼異常並顯示它在代碼中的位置嗎? –

+0

它不能從/ lib位置加載類 – sss

+0

它在第一次和第二次嘗試中都失敗了,我相信問題在於我正在給poi jar的位置字符串 – sss

回答

0

這應該是一個評論,但我沒有足夠的地方。請不要投票。

我參加了一個隨機罐子這是目前我的機器上:

/home/adenoyelle/.m2/repository/antlr/antlr/2.7.2/antlr-2.7.2.jar

這個jar包含很多類。其中之一是antlr.ActionElement。所以這是我在你的代碼更改:

try { 
    System.out.println("First attempt..."); 
    Class.forName("antlr.ActionElement"); //Changed this line 
} catch (Exception ex) { 
    System.out.println("Failed."); 
} 
try { 
    URL urls[] = {}; 
    JarFileLoader cl = new JarFileLoader(urls); 

    //Changed this line 
    cl.addFile("/home/adenoyelle/.m2/repository/antlr/antlr/2.7.2/antlr-2.7.2.jar"); 
    System.out.println("Second attempt..."); 
    cl.loadClass("antlr.ActionElement"); //Changed this line 
    System.out.println("Success!"); 
} catch (Exception ex) { 
    System.out.println("Failed."); 
    ex.printStackTrace(); 
} 

輸出:

First attempt... 
Failed. 
Second attempt... 
Success! 

我的猜測是,路徑到您的罐子是錯誤的。我通過提供一個絕對路徑來實現這個簡單的方法(並且您給出的路徑也被解釋爲可能是問題根源的絕對路徑)。

請嘗試以下方法:

  • cl.addFile( 「LIB/poi3.10final.jar」);
  • cl.addFile(「poi3.10final.jar」);
  • cl.addFile(「C:/absolute/path/to/poi3.10final.jar」);
+0

謝謝,但我使用的是窗口機器,所以我應該給Linux下包含C盤的路徑你顯示它會正常工作 – sss

+0

@sss沒問題。在Windows上,絕對路徑將看起來像'C:/ path/to/your/jar'(已編輯)。 –

+0

謝謝我正在嘗試C:\\ path \\ poi。 Jar,所以我認爲這是反斜槓問題,因爲我可以在你的窗口路徑問題中看到你使用正斜槓 – sss

相關問題