的Class.forName(clazz.getName());抛出java.lang.ClassNotFoundException

时间:2016-01-26 03:00:48

标签: java jar classloader

我正在动态加载jar文件,在jar中加载时,我将所有Class个对象保存到List。在所有jar中加载后,我执行下面的代码,它会抛出java.lang.ClassNotFoundException指向Class.forName(clazz.getName())。我不确定为什么java无法找到该类,即使它已被明确加载,有人可以解释一下。

    Class<?> clazz = listOfClasses.get(0);
    try {
        Class.forName(clazz.getName());
    }
    catch(Exception e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:0)

Class.forName(String)使用调用Class.forName的代码的类加载器。听起来你可能会在不同的类加载器中动态加载类?

答案 1 :(得分:0)

正如您所说,您正在动态且明确地加载类,它们与Class.forName的代码位于不同的类加载器中。在这种情况下,您还需要将类加载器传递给Class.forName

Class<?> clazz = listOfClasses.get(0);
try {
    Class.forName(clazz.getName(), true, clazz.getClassLoader());
} catch(Exception e) {
    e.printStackTrace();
}