使用ClassLoader加载JAR文件时出现ClassNotFoundException

时间:2013-04-22 18:19:08

标签: java eclipse jar classloader

我在这里和那里选择了创建和使用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();
    }
}

我错过了什么?

谢谢!

2 个答案:

答案 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。