2011-10-24 84 views
2

我想從一個jar文件動態加載一個類。它在Ubuntu的Linux機器上運行良好(Sun Java版本1.6.0_24(b07))在Windows上Java動態類加載失敗,但在Linux上工作正常

當我試圖在Windows(Windows 7,Java版本「1.6.0_14」)上運行相同的東西時, 。發現異常

以下是代碼:

try { 
     String jarFile = "/sqljdbc4.jar"; 
     File newf = new File(jarFile); 
     System.out.println(newf.getAbsolutePath()); 
     System.out.println("File exists ? :" + newf.exists()); 
     String urlPath = "jar:file://" + newf.getAbsolutePath() + "!/"; 
     System.out.println(urlPath); 
     ClassLoader cur = Thread.currentThread().getContextClassLoader(); 

     URL[] jarUrlArray = { new URL(urlPath) }; 
     URLClassLoader cl = URLClassLoader.newInstance(jarUrlArray, cur); 

     Class c = Class.forName(
       "com.microsoft.sqlserver.jdbc.SQLServerDriver", true, cl); 
     Method m[] = c.getMethods(); 
     for (Method mm : m) { 
      System.out.println(mm.getName()); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

雖然在Linux上運行,罐被放置在根目錄和Windows它位於C:\(源代碼和二進制在某些文件夾C:\等等「 /sqljdbc4.jar「在Windows上解析爲c:\ sqljdbc4.jar,我已確保將正確的jar位置傳遞給兩個平臺的類加載器。

以下是堆棧跟蹤我得到的窗口

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver 
at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:594) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:247) 
at DemoClass.loadAClass(DemoClass.java:31) 
at DemoClass.main(DemoClass.java:14) 

注意:您可以使用u必須嘗試了這一點任何罐子。我在玩MS SQL Server JDBC Driver jar。

謝謝!

-Abhijeet。

回答

3

嘗試使用它來創建的URL,而不是手動構建字符串:

URL[] jarUrlArray = { newf.toURI().toURL() }; 
+0

非常感謝bkail!它工作 –

+0

我一直在這一整天掙扎。擴展URLClassLoader。很多其他的Stackoverflow問題都有這個問題。具體涉及URLClassLoader。非常感謝@bkail。 – Koekiebox

相關問題