我正在学习java。 我的示例目录如下所示:
./ SRC
./src/yxy
./src/yxy/pack
./src/yxy/pack/testf
./src/yxy/pack/testf/Person.java
./Hello.java
./Hello.class./ testpack
./testpack/yxy
./testpack/yxy/pack
./testpack/yxy/pack/testf
./testpack/yxy/pack/testf/Person.class
./testpack.jar
src目录用作库。它提供了Person类 src的输出位于testpack目录中 我根据testpack direcotory生成了一个testpack.jar Hello.java是主要的java文件。它使用Person类。
Person.java 源代码如下:
package yxy.pack.testf;
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Hello.java 源代码如下:
import java.io.*; //IOException
import java.util.*; //Enumeration
import yxy.pack.testf.Person;
public class Hello{
public static void main(String[] args)throws IOException {
Person p=new Person("abc");
Class cls=Person.class;
ClassLoader clsLoader=cls.getClassLoader();
String clsFile=cls.getName();
System.out.println("end");
}
}
我使用以下方法在当前目录下生成testpack.jar。
javac -verbose -d testpack src \ yxy \ pack \ testf \ Person.java
cd testpack
jar -cvf testpack.jar ./yxy
移动testpack.jar ./../testpack.jar
cd ..
我使用以下方法构建并运行应用程序:
javac -classpath。\ testpack.jar Hello.java
java -classpath。\ testpack.jar Hello
这是我得到的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: Hello Caused by: java.lang.ClassNotFoundException: Hello at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: Hello. Program will exit.
我不知道为什么会这样。我该如何解决?
java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: yxy/pack/testf/Person at Hello.main(Hello.java:10) Caused by: java.lang.ClassNotFoundException: yxy.pack.testf.Person at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 more
我该如何解决这个问题?
=== 无论如何,我发现了如何修复。只需在cmd中使用以下内容即可。
>java -classpath testpack.jar;. Hello
我必须添加testpack.jar和当前路径。到类路径。
答案 0 :(得分:2)
嗯,这可能是很多东西,如果你是Java的初学者,我建议从IDE开始,如果你不想要这个,那么这里有3 ways to resolve NoClassDefFoundError in Java上的链接
以下是另一位用户的摘录,解释了此错误发生的原因:
当我在包中创建一个类文件时,我总是会遇到这个错误 然后尝试从包中运行程序。解决方案 是在你的文件系统中上升一级,以便你在这个级别上 包装,而不是包装内容。
例如,如果您的包名称是问候语,而您的类文件是 name是HelloWorld,您的程序包含以下行:
包问候;
包名称对应于文件系统中的目录,例如 C:\的Java \问候。您的类文件在该目录中,即它 文件名是C:\ Java \ greetings \ HelloWorld.class。
如果您定位到c:\ Java \ greetings,然后执行:
java HelloWorld
您收到NoClassDefFound错误。如果你上一个目录,在这里 case到C:\ Java,而不是C:\ Java \ greetings,然后执行以下操作:
java greetings.HelloWorld
你的程序应该适合你。