我的应用程序中有一个课程:
package com.myapp;
public class Foo {}
当我尝试像这样加载它时:
package com.myapp;
public class Main {
public static void main(String[] args) {
Class.forName("com.myapp.Foo");
}
}
有效。
但是,如果我尝试使用AccessController
中的类加载器,则会抛出ClassNotFoundException
:
package com.myapp;
public class Main {
public static void main(String[] args) {
final ClassLoader classLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
public ClassLoader run() {
return Thread.currentThread().getContextClassLoader();
}
});
Class.forName("com.myapp.Foo", true, classloader);
}
}
完整的堆栈跟踪如下:
java.lang.ClassNotFoundException: com.myapp.Foo
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.myapp.Main(Main.java:10)
我该如何解决?