URLClassLoader无法正常工作

时间:2011-03-23 08:59:31

标签: java urlclassloader

我想在目录 F:/ badge-dao / bin / com / badge / dao / impl / 中加载一个名为 BadgeDaoImpl 的文件。我正在编写并测试以下代码。

如果我更改目录或类名,则会引发异常。对于下面的代码,我认为它应该工作,它不会抛出一个classNotFoundException,而是暂停并将控件带到EventTable的finally块。

你能告诉我在哪里弄错了。

URL[] urls = {new URL("file:/F:/badge-dao/bin/com/badge/dao/impl/")};

ClassLoader parentClassLoader = project.getClass().getClassLoader();

URLClassLoader classLoader = new URLClassLoader(urls, parentClassLoader);

selectedClass = classLoader.loadClass("BadgeDaoImpl");

1 个答案:

答案 0 :(得分:4)

包名称是完整类名的一部分,而不是classpath项,因此您需要以下内容:

URL[] urls = {new URL("file:/F:/badge-dao/bin")}; 
...
selectedClass = classLoader.loadClass("com.badge.dao.impl.BadgeDaoImpl"); 

在原始代码中,类加载器可以在BadgeDaoImpl.class中找到名为file:/F:/badge-dao/bin/com/badge/dao/impl/的文件,但其完整的类名(com.badge.dao.impl.BadgeDaoImpl)与请求的文件不匹配(BadgeDaoImpl ),因此类加载器抛出NoClassDefFoundError。由于您只捕获ClassNotFoundException,因此控件似乎无声地传递到finally块。更改文件夹或类名以便找不到.class文件时,将按预期抛出ClassNotFoundException