-4

我正在学习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 目录生成了一个 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
move testpack.jar ./../testpack.jar
cd ..

我使用以下方法来构建和运行应用程序:

javac -classpath .\testpack.jar Hello.java
java -classpath .\testpack.jar 你好

这是我得到的错误:

    线程“主”java.lang.NoClassDefFoundError 中的异常:你好  
    引起:java.lang.ClassNotFoundException:你好  
            在 java.net.URLClassLoader$1.run(未知来源)  
            在 java.security.AccessController.doPrivileged(本机方法)  
            在 java.net.URLClassLoader.findClass(未知来源)  
            在 java.lang.ClassLoader.loadClass(未知来源)   
            在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源)  
            在 java.lang.ClassLoader.loadClass(未知来源)  
    找不到主类:你好。程序将会退出。

我不明白为什么会这样。我该如何解决?

你好

    线程“main”中的异常 java.lang.NoClassDefFoundError: yxy/pack/testf/Person

            在 Hello.main(Hello.java:10)
    引起:java.lang.ClassNotFoundException:yxy.pack.testf.Person
            在 java.net.URLClassLoader$1.run(未知来源)
            在 java.security.AccessController.doPrivileged(本机方法)
            在 java.net.URLClassLoader.findClass(未知来源)
            在 java.lang.ClassLoader.loadClass(未知来源)
            在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源)
            在 java.lang.ClassLoader.loadClass(未知来源)
            ... 1 更多

我怎样才能解决这个问题?

=== 无论如何,我找到了解决方法。只需在cmd中使用以下内容。

>java -classpath testpack.jar;. Hello

我必须添加 testpack.jar 和 current path 。到类路径。

4

1 回答 1

2

好吧,这可能是很多事情,如果您是 Java 的初学者,我建议您从 IDE 开始,但是如果您不想要这个,那么这里有一个关于解决 Java 中 NoClassDefFoundError 的 3 种方法的链接

这也是另一个用户的摘录,他解释了为什么会发生此错误:

当我在包中创建类文件然后尝试从包中运行程序时,我总是会收到该错误。解决方案是在文件系统中上一层,这样您就处于包的级别,而不是包内容的级别。

例如,如果你的包名是 greetings,你的类文件名是 HelloWorld,你的程序包含以下行:

包裹问候语;

包名对应于文件系统中的一个目录,例如 C:\Java\greetings。您的类文件位于该目录中,即其文件名为 C:\Java\greetings\HelloWorld.class。

如果定位到 c:\Java\greetings 然后执行:

java HelloWorld

你得到一个 NoClassDefFound 错误。如果您上一个目录,在本例中是 C:\Java,而不是 C:\Java\greetings,然后执行以下操作:

java问候.HelloWorld

你的程序应该适合你。

于 2012-07-17T17:07:12.960 回答