gpt4 book ai didi

java - URLClassLoader 不工作

转载 作者:行者123 更新时间:2023-11-29 03:57:38 27 4
gpt4 key购买 nike

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

如果我更改目录或类名,它会抛出异常。对于我认为应该有效的以下代码,它不会抛出 classNotFoundException,而是停止并将控制权交给 EventTable 的 finally block 。

你能告诉我哪里错了吗

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");

最佳答案

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

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

在你的原始代码中,类加载器可以在 file:/F:/badge-dao/bin/com/badge/dao/impl/ 中找到一个名为 BadgeDaoImpl.class 的文件>,但它的完整类名 (com.badge.dao.impl.BadgeDaoImpl) 与请求的类名 (BadgeDaoImpl) 不匹配,因此类加载器抛出一个 NoClassDefFoundError。由于您只捕获了 ClassNotFoundException,因此看起来控制权悄无声息地传递给了 finally block 。当您更改文件夹或类名称以致无法找到 .class 文件时,将按预期抛出 ClassNotFoundException

关于java - URLClassLoader 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5402816/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com