1

似乎我应该能够使用派生的类加载器来做到这一点,URLClassLoader其中包括loadClass()

public Class loadClass(String className, byte[] classBytes)
throws ClassNotFoundException, NoClassDefFoundError
{
    Class result = null;

    result = defineClass(className, classBytes, 0, classBytes.length);
    classes.put(className, result);
    return result;
}

然后我从一个类文件中读取字节并调用上面的 loadClass 方法。我明白了:

java.lang.NoClassDefFoundError: com/samples/SampleClass (wrong name: com/samples/SampleClass) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.lang.ClassLoader.defineClass(ClassLoader.java:465)

奇怪的是名字和“错误的名字”是一样的。两者都是正确的包装。

如何获得NoClassDefFoundError正确的预期名称?有可能做到这一点defineClass吗?

使用不推荐使用的形式,没有类名,可以完美地工作:

result = defineClass(classBytes, 0, classBytes.length);

谢谢

4

1 回答 1

1

javadoc: Parameters: name - The expected name of the class, or null if not known, using '.' and not '/' as the separator and without a trailing ".class" suffix.

try replace "/" to "."

于 2013-07-31T07:52:41.677 回答