В моем приложении есть класс:
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)
Как я могу это исправить?