我试图从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文件,没有$符号。