我想在名为BadgeDaoImpl的目录F:/BadgeDaoImpl/bin/com/p徽/dao/impl/中加载一个文件。我正在编写和测试以下代码。
如果更改目录或类名,则会引发异常。对于下面的代码(我认为它应该能工作),它不会抛出一个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");发布于 2011-03-23 09:24:09
包名是完整类名的一部分,而不是类路径项,因此需要以下内容:
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。
https://stackoverflow.com/questions/5402816
复制相似问题