gpt4 book ai didi

java - 从 JarInputStream 读取类到列表时出现 ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-02 03:08:23 26 4
gpt4 key购买 nike

我正在读取 Jar 文件,并使用 JarInputStream 将文件分成单独的类。如果我在控制台中打印出名称,它工作正常,但是当我尝试使用 Class.forName(name) 并将其添加到我的列表中时,程序会抛出 ClassNotFoundException。

 list = new ClassList();

JarInputStream in = new JarInputStream(new FileInputStream(new File("test-jar.jar")));

JarEntry next = in.getNextJarEntry();

while (next != null)
{
if (next.getName().endsWith(".class"))
{
String name = next.getName().replaceAll("/", "\\.");

name = name.replaceAll(".class", "");

if (!name.contains("$")) name.substring(0, name.length() - ".class".length());

System.out.println(name);

Class queryClass;

try {
queryClass = Class.forName(name);
list.add(queryClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

System.out.println(list.size());
}
next = in.getNextJarEntry();

}

包名称:
ie.gmit.sw

类名
工匠、Galaxian玩家、业余爱好者、律师、Pastimable、玩家、扑克玩家、运行者、科学家、 worker 、斯诺克玩家、集邮者、学生

堆栈跟踪

java.lang.ClassNotFoundException: ie.gmit.sw.Playerable
ie.gmit.sw.Runner
1
ie.gmit.sw.Playerable
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at ie.gmit.sw.ReadinJarFile.main(ReadinJarFile.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
1
ie.gmit.sw.Scientist
1
ie.gmit.sw.PokerPlayer
1
ie.gmit.sw.SnookerPlayer
1
ie.gmit.sw.Lawyer
1
ie.gmit.sw.Worker
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
java.lang.ClassNotFoundException: ie.gmit.sw.Scientist
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at ie.gmit.sw.ReadinJarFile.main(ReadinJarFile.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
java.lang.ClassNotFoundException: ie.gmit.sw.PokerPlayer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at ie.gmit.sw.ReadinJarFile.main(ReadinJarFile.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
java.lang.ClassNotFoundException: ie.gmit.sw.SnookerPlayer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at ie.gmit.sw.ReadinJarFile.main(ReadinJarFile.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
java.lang.ClassNotFoundException: ie.gmit.sw.Lawyer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at ie.gmit.sw.ReadinJarFile.main(ReadinJarFile.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
java.lang.ClassNotFoundException: ie.gmit.sw.Worker
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at ie.gmit.sw.ReadinJarFile.main(ReadinJarFile.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
1

最佳答案

如果您想从 jar 文件加载任何 class,则该 jar 文件应存在于您的应用程序classpath<中。使用 JarInputStream 读取 jar 文件不会将该 jar 添加到您的类路径中。在您的应用程序classpath中添加该jar,此异常就会消失。

关于java - 从 JarInputStream 读取类到列表时出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41417763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com