2009-10-21 30 views
1

我有一個可以通過符合給定接口的java類擴展的應用程序。 如果我運行命令行類的節目,我可以用實例化的附加類:程序從jar執行時的動態加載問題

Class.forName("myAddon").newInstance(); 

但是如果我罐子應用(正確設置主類),我得到一類不發現異常。任何人都可以點亮這裏發生的事情嗎?

TIA, 亞當

+0

如何你在命令行上指定jar嗎? – akf 2009-10-21 13:20:19

+0

java -jar Myprogram.jar <要加載的類> – apchester 2009-10-21 13:35:35

回答

1

我設法得到這個工作使用的URLClassLoader,指定搜索路徑是當前目錄如下:

URLClassLoader cl = new URLClassLoader(new URL[] {new File(".").toURI().toURL()}); 

感謝您的幫助,

亞當

+0

難道你不能把類文件放入jar嗎? (順便說一句:'URLClassLoader.newInstance'稍微好點。) – 2009-10-21 16:48:07

+0

好點 - 謝謝。 – apchester 2009-10-28 14:32:10

0

你要找的類不是在類路徑中。如果它在一個目錄

即 MyClass.class MyJar.jar

你需要做的:

java -classpath . -jar MyJar.jar 

但實際上,我們需要更多的信息來回答這個問題。在jar清單中設置的主要類是什麼?你的類路徑是什麼?你如何指定加載哪個類?

+0

Hi Rob, 當我指定-jar時,我認爲classpath標誌在命令行上被忽略。 WRT你的問題,類路徑只是默認的類路徑 - 沒有設置額外的參數。 清單中定義的主類是com.mycompany.Main,當錯誤在類的主要方法中拋出時,它正在正常工作。 要加載的類被指定爲命令行參數。 Adam – apchester 2009-10-21 13:33:23

+0

您或者需要在JAR的清單中指定需要的類路徑,或者只需使用java -cp調用該類就可以了。com.mycompany.Main – 2009-10-21 13:39:12

+0

該類是否被加載到默認的類路徑中? – 2009-10-21 14:30:22