为什么会出现java.lang.NoClassDefFoundError?

时间:2019-06-14 04:47:03

标签: java

我创建了一个简单的程序来练习多态性和继承,它可以在单个文件中编译并完美运行。然后,我将程序分成同一个程序包中的多个文件。我能够使用javac *.java编译文件,并且编译时没有错误。但是,当我通过输入java zoo_sim运行程序时,我得到:

Error: Could not find or load main class zoo_sim Caused by:
java.lang.NoClassDefFoundError: zoo_proj/zoo_sim (wrong name: zoo_sim)

包含main的类的名称为zoo_sim。 程序包的名称为zoo_proj

在每个文件的顶部都有以下行:

package zoo_proj;

我是java的新手,如果我在这里缺少一些愚蠢的东西,我感到抱歉。 谢谢!

编辑:这是我的zoo_sim课:

package zoo_proj;

public class zoo_sim {
        public static void main(String args[]) {
                //create and allocate animal array
                Animal animalArray[] = new Animal[3];

                //and Leo to animal array
                Animal Leo = new Cat("Leo", 4, 13);
                animalArray[0] = Leo;

                //add Crixus to animal array
                Animal Crixus = new Dog("Crixus", 5, 50);
                animalArray[1] = Crixus;

                //add Peter to animal array
                Animal Peter = new Pig("Peter", 3, 100);
                animalArray[2] = Peter;

                //c style for loop
                for(int i = 0; i < animalArray.length; i++) {
                        System.out.print(animalArray[i].getName() + " is " + animalArray[i].getAge() + " years old and says ");
                        animalArray[i].makeSound();
                }

                //print line in between
                System.out.println();

                //for each style for loop 
                for(Animal i : animalArray) {
                        System.out.print(i.getName() + " weighs " + i.getWeight() + " pounds and says ");
                        i.makeSound();
                }
        }
}

我正在使用在命令行中运行的linux。这是我对java -version的输出:

openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu218.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu218.04.1, mixed mode, sharing)

当我输入java zoo_proj.zoo_sim时,我得到:

Error: Could not find or load main class zoo_proj.zoo_sim 
Caused by: java.lang.ClassNotFoundException: zoo_proj.zoo_sim

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您正在软件包目录java zoo_proj.zoo_sim中执行zoo_proj。 上一层,从java zoo_proj.zoo_sim上的目录上方执行zoo_proj

我要复制的步骤是:

  • 让我的顶级目录为/zoo
  • package zoo_proj的所有文件都在/zoo/zoo_proj目录中, 即布局是:
/zoo
----/zoo_proj
-------------/Animal.java
-------------/Cat.java
-------------/Dog.java
-------------/Pig.java
-------------/zoo_sim.java
  • 所有命令都在/zoo目录中执行,而不是在zoo/zoo_proj目录中执行。
  • 要编译Java文件,请执行javac zoo_proj/*.java。成功执行后,zoo_proj现在应该为每个.class文件包含相应的.java文件。
  • 执行java zoo_proj.zoo_sim。程序成功执行。
  • 如果您转到/zoo/zoo_proj并从此处执行java zoo_proj.zoo_sim,则输出为Error: Could not find or load main class zoo_proj.zoo_sim