我在这里和那里选择了创建和使用jar文件中的类的指令(和代码)。
我创建了一个Test.java文件:
package a;
public class Test {
public String print(){
return "TestLALALA";
}
}
并创建了一个jar文件:
jar cvf0 Test.jar Test.java
当我提取jar(通过命令行)时,该类是完整的。
我将jar放在Eclipse项目的“libs”文件夹中。我可以在“Libraries”下的“Build Path”项目中看到它。
以下代码遇到ClassNotFoundException:
URL[] urls = new URL[1];
try {
File file = new File("C:\\Eclipse\\Demo\\libs\\Test.jar");
urls[0] = file.toURI().toURL();
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
URLClassLoader loader = new URLClassLoader (urls);
Class classToLoad = null;
if(loader!=null)
{
try {
classToLoad = loader.loadClass("a.Test");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
我错过了什么?
谢谢!
答案 0 :(得分:0)
看起来您只是将未编译的.java文件添加到JAR而不是编译的.class文件。
此外,JAR中的文件应为a/Test.class
,因此您需要确保其中存在a
目录以表示程序包路径。目前,该文件似乎存在于JAR的根目录中,而不是存在于子目录中。
答案 1 :(得分:0)
使用Eclipse中的jar导出来确保它已正确创建。
你可以尝试这个:
Test test1 = new Test();
Class.forName("a.Test");
如果要测试动态加载,可以删除Test test1 .... 但是我真的不明白你为什么要把它变得如此复杂,而不是UrlClassLoader。