Java 动态类加载器抛出 ClassNotFoundException

标签 java classloader

我有一个项目,它有自己的类加载器。 但是我在加载一些类时遇到了一个奇怪的问题。

基本上,它就像:

@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
{
    // do some magic
    return myBrandNewClas;
}

但是发生的情况是,即使返回一个类,Class.forName(...)仍然抛出ClassNotFoundException(示例可以在here中找到) .

另一个信息:返回的类名与请求的类名不同。

我开始怀疑这是否是JVM的安全锁(在Oracle JVM中测试)。

谢谢!

最佳答案

forName 的代码是 native 的,因此很难看到,但是是的,我会说名称已被检查,因为传递正确的名称是有效的:

public class BBB
{
public static class a {

}

private static class MyCL extends ClassLoader
{
    @Override
    protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
    {
        System.out.println("Hi, " + a.class.getName());
        return a.class;
    }
}

public static void main(String[] args) throws ClassNotFoundException
{
    MyCL cl = new MyCL();

    System.out.println(Class.forName("com.asg.util.BBB$a", true, cl));

}

关于Java 动态类加载器抛出 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688772/

相关文章:

java - 在 rhino (JavaScript) 的 Java 方法上使用 .apply()

java - 正则表达式模式未获取匹配项

java - 如何在拖动鼠标时平滑地填充椭圆

classloader - ClassCastException 通过强制转换为欠类型

java - 如何打印命令 "mvn compile"的类加载模式?

java - Hadoop 文件系统中的通配符列出 API 调用

java - 如何在Android的Qt上使用HockeyApp SDK

java - 类路径中的远程 jar

java - 打开文件;首先尝试文件系统,然后尝试 JAR

java - 了解 Groovy/Grails 类加载器泄漏