Java Class.forName не может найти класс - PullRequest
2 голосов
/ 06 марта 2019

В моем приложении есть класс:

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)

Как я могу это исправить?

...