java.lang.NoClassDefFoundError

时间:2011-04-07 21:00:24

标签: java noclassdeffounderror

我正在学习Java,无法运行示例程序。

我有两个文件:

GoodDog.java:

    class GoodDog {
    private int size;
    public int getSize() {
      return size;
    }

    public void setSize(int s) {
      size = s;
    }

    void bark() {
      if (size > 60) {
        System.out.println("Wooof! WoooF!");
      } else if (size > 14) {
        System.out.println("Ruff! Ruff!");
      } else {
        System.out.println("Yip! Yip!");
      }
    }
}

GoodDogTestDrive.java:

    class GoodDogTestDrive {
    public static void main (String[] args) {
      GoodDog one = new GoodDog();
      one.setSize(70);
      GoodDog two = new GoodDog();
      two.setSize(8);
      System.out.println("Dog one: " + one.getSize () );
      System.out.println("Dog two: " + two.getSize () );
      one.bark();
      two.bark();
    }
}

它们的排版方式与书中的方式完全相同,编译时没有问题。当我尝试运行GoodDogTestDrive时,我得到了这个:

nephi-shields-mac-mini:/Developer/MyProjects/GoodDog nephishields$ java GoodDogTestDrive.class
java.lang.NoClassDefFoundError: GoodDogTestDrive/class
Exception in thread "main" nephi-shields-mac-mini:/Developer/MyProjects/GoodDog nephishields$ 

我做错了什么?

7 个答案:

答案 0 :(得分:16)

请勿在命令中包含.class

java GoodDogTestDrive

答案 1 :(得分:12)

值得注意的是,尽管此问题的解决方案很简单(只需从Java命令行中删除.class),但在Java Web应用程序开发的上下文中很难确定java.lang.NoClassDefFoundError。 / p>

此Java异常意味着无法在当前Thread上下文类加载器中加载和/或找到“运行时”Java类。这通常是以下结果:

  • 在运行时类路径中缺少库。
  • Static {} block代码初始化程序执行失败(阻止受影响类的类加载)。
  • JAR文件打包/ class loader tree问题,例如在子级和部署的JAR文件的混合。父类加载器。

建议任何Java初学者在预期将来的故障排除事件时正确理解此类问题。

答案 2 :(得分:1)

只需使用“java yourClass”运行程序。

最后不要使用.class。

试一试,告诉我们。

答案 3 :(得分:0)

如果GoodDog类文件不在当前工作目录中,则需要在java命令中设置类路径....

java GoodDogTestDrive -cp ./path/to/gooddog/

答案 4 :(得分:0)

<强>问题-java.lang.NoClassDefFoundError

根本原因:环境变量部分

中设置的Java路径不正确

解决方案:设置正确的JAVA_HOME路径

步骤 - &gt;环境变量设置(我的Comp-Right Click - &gt; Properties-&gt; Env Variable-&gt; Advance Tab - &gt; Variable)

  1. 创建新的JAVA_HOME环境变量。

    JAVA_HOME    **.;C:\Program Files (x86)\Java\jdk1.6.0_14**
    
  2. 在PATH变量部分设置JAVA_HOME变量。

    PATH  %JAVA_HOME%\bin
    
  3. 在CLASSPATH变量中设置JAVA_HOME变量

    CLASSPATH  %JAVA_HOME%\jre\lib
    
  4. 重启系统

  5. 验证所有变量

    echo %CLASSPATH%
    
    echo %JAVA_HOME%
    
    echo %PATH%
    
  6. 编译java类javac Test.java

  7. 运行Java程序java Test

答案 5 :(得分:0)

如果JVM或ClassLoader实例尝试加载类的定义(方法调用或创建新实例)并且找不到类的定义,则抛出该文件。

NoClassDefFoundError的原因是某个特定的类在运行时不可用,但在编译期间可用。

1.该类属于缺少JAR或JAVA文件,或者JAR未添加到类路径中。

2. Class Classpath中没有类。

3. 由于静态初始化程序块中的异常导致Java中的NoClassDefFoundError 。当你的类在静态中执行一些静态初始化时  块,如果静态块抛出一个异常,那么这个类就是  引用这个类将在Java中获得NoclassDefFoundError。

4.您的 Classpath,PATH或JAVA_HOME 未正确设置或JDK安装不正确。可以通过重新安装JDK 来解决。

5.使用必要的源(.java)文件进行 maven clean-install 并简单地重新启动服务器

答案 6 :(得分:-1)

我遇到了和你一样的问题。

我解决了这个问题:

  1. 检查环境变量中的类路径
  2. 我在eclipse的导航器中打开了项目,并检查了类文件。我的班级文件位于不在 bin 文件夹中的不同文件夹中。我只是将丢失的文件复制到 bin 文件夹中,然后解决了问题。
  3. 只需将缺少的.class文件复制到eclipse项目的 bin 目录即可解决问题。