使用URLClassLoader从Jar文件加载.Class在某些类上失败

时间:2014-09-26 22:28:38

标签: java class jar classnotfoundexception urlclassloader

我试图从jar文件中加载类,加载了一些类但是它会在其中一些类上抛出一个classNotFoundException(即使我抓住了异常,它仍然会抛出它我真的不喜欢它知道如何)。

这是代码(我在这里找到并且对每个人都很有效):

    for (File jarFilePath : jarFilePaths) {
        pathToJar = jarFilePath.getAbsolutePath();
        jarFile = new JarFile(pathToJar);
        jarFiles.add(jarFile);

        Enumeration e = jarFile.entries();
        URL[] urls = { new URL("jar:file:" + pathToJar + "!/") };
        URLClassLoader cl = URLClassLoader.newInstance(urls);

        log.debug("Loading classes from jar : " + jarFile.getName());
        while (e.hasMoreElements()) {
            JarEntry je = (JarEntry) e.nextElement();
            if (je.isDirectory() || !je.getName().endsWith(".class")) {
                continue;
            }
            // -6 because of .class
            String className = je.getName().substring(0, je.getName().length() - 6);
            className = className.replace('/', '.');
            Class c;
            try {
                c = cl.loadClass(className);
                classes.add(c);
                log.debug("Loaded : " + className);
            } catch (ClassNotFoundException e1) {
                log.debug("Did not load : " + className + " - ClassNotFoundException");
                //e1.printStackTrace();
            }
        }
    }

这段代码让我从jar加载类,它运行良好,但是它会在某些类上抛出一个ClassNotFoundException并且它没有被捕获(我的调试没有出现,并且堆栈轨道甚至打印出来如果我把它放在评论中)

编辑:我为NoClassDefFoundError添加了一个catch,现在它捕获了异常。 但是,我仍然不知道它为什么不加载这些类。我检查过它们,它们是完整的.class文件,没有$符号。

0 个答案:

没有答案