Java URLClassLoader在加载类时引发NullPointerException
我正在开发的(Android)应用程序的一部分需要一个“插件”文件夹,用户可以将自己的代码作为jar文件放入其中。应用程序将扫描文件夹中的jar文件,并尝试加载找到的所有类。现在,应用程序根本没有加载任何类,因为似乎所有对URLClassLoader.loadClass()的调用都会导致空指针Java URLClassLoader在加载类时引发NullPointerException,java,android,Java,Android,我正在开发的(Android)应用程序的一部分需要一个“插件”文件夹,用户可以将自己的代码作为jar文件放入其中。应用程序将扫描文件夹中的jar文件,并尝试加载找到的所有类。现在,应用程序根本没有加载任何类,因为似乎所有对URLClassLoader.loadClass()的调用都会导致空指针 private static URLClassLoader classLoader; private static List<Class<? extends OpMode>> op
private static URLClassLoader classLoader;
private static List<Class<? extends OpMode>> opModeList;
private static void attemptLoadClass(String entryname) {
String classname = entryname.replace('/', '.');
classname = classname.substring(0, classname.length() - 6);
try {
Class<?> c = classLoader.loadClass(classname);
// ^^^ Problems are happening right here ^^^
Object instance = c.newInstance();
if (instance instanceof OpMode) {
opModeList.add(((OpMode)instance).getClass());
}
} catch (Throwable ex) {
ex.printStackTrace();
}
}
私有静态URLClassLoader类加载器;
私有静态列表c=classLoader.loadClass(classname);
//^^^问题就在这里发生^^^
对象实例=c.newInstance();
if(OpMode的实例instanceof){
添加(((OpMode)instance.getClass());
}
}捕获(可丢弃的ex){
例如printStackTrace();
}
}
classLoader由一个URL数组构成,该数组指向所有需要加载的jar文件。我还应该提到,当代码在Android设备上运行时,它似乎只会抛出无法解释的错误,而不是在我的计算机上。您似乎在说NPE是由这行代码抛出的:
Class<?> c = classLoader.loadClass(classname);
Class c=classLoader.loadClass(classname);
如果是这样,那么只有一种可能的解释:
classloader
是null
忘记初始化classloader本身了,不是吗?classloader是在调用attemptloadeclass()的函数中初始化的,它向我们显示堆栈跟踪。不会从该行引发异常,而是从函数调用中。向我们展示堆栈跟踪!以及创建类加载器的代码。