失败,我已经对Java代码下面的代码片段:动态类加载运行时
final Class<?> junitCoreClass = AccessController.doPrivileged(
new PrivilegedAction<URLClassLoader>() {
@Override
public URLClassLoader run() {
return new URLClassLoader(new URL[] { junitJarUrl });
}
}).loadClass("org.junit.runner.JUnitCore");
System.out.println(junitCoreClass.getName());
final JUnitCore junitCore = (JUnitCore) junitCoreClass.newInstance();
编译没有问题。但是当我尝试运行它时,发生了一些奇怪的事情;一个java.lang.NoClassDefFoundError
引发最后一行,指刚刚加载的类。奇怪的部分是,println
打印确切的类名称。
我检查过,如果我将新实例引用保留为Object
并仅通过反射操作它,一切都很好,所以违规的代码片段必须是明确的转换。
有人可以向我解释为什么会发生这种情况,还告诉我如何实现我想要做的事情?
PS:对于那些谁希望看到一个更紧密堆栈跟踪,没有太多显示:
java.lang.NoClassDefFoundError: org/junit/runner/JUnitCore at [last line of example) [lines from my app] Caused by: java.lang.ClassNotFoundException: org.junit.runner.JUnitCore at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:315) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330) at java.lang.ClassLoader.loadClass(ClassLoader.java:250) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398) at [last line of example] [lines from my app]
请向我们展示异常的完整堆栈跟踪。 – 2010-05-21 23:23:19