Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java URLClassLoader在加载类时引发NullPointerException_Java_Android - Fatal编程技术网

Java URLClassLoader在加载类时引发NullPointerException

Java URLClassLoader在加载类时引发NullPointerException,java,android,Java,Android,我正在开发的(Android)应用程序的一部分需要一个“插件”文件夹,用户可以将自己的代码作为jar文件放入其中。应用程序将扫描文件夹中的jar文件,并尝试加载找到的所有类。现在,应用程序根本没有加载任何类,因为似乎所有对URLClassLoader.loadClass()的调用都会导致空指针 private static URLClassLoader classLoader; private static List<Class<? extends OpMode>> op

我正在开发的(Android)应用程序的一部分需要一个“插件”文件夹,用户可以将自己的代码作为jar文件放入其中。应用程序将扫描文件夹中的jar文件,并尝试加载找到的所有类。现在,应用程序根本没有加载任何类,因为似乎所有对URLClassLoader.loadClass()的调用都会导致空指针

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()的函数中初始化的,它向我们显示堆栈跟踪。不会从该行引发异常,而是从函数调用中。向我们展示堆栈跟踪!以及创建类加载器的代码。