线程'main'中的异常java.lang.NoClassDefFoundError:

Har*_*tha 47 java noclassdeffounderror

以下程序抛出错误:

public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello World!"); 
    }
}

CLASSPATH C:\Program Files\Java\jdk1.6.0_18\bin\

Path C:\Program Files\Java\jdk1.6.0_18\bin\

JAVAHOME C:\Program Files\Java\jdk1.6.0_18\bin
Run Code Online (Sandbox Code Playgroud)

你能告诉我根本原因吗?

小智 66

我找到了另一个常见的原因.如果使用像eclipse这样的IDE在包内创建java文件,您将在java文件的顶部找到包名称,如"package pkgName".如果您尝试从命令提示符运行此文件,您将收到NoClassDefFoundError错误.从java文件中删除包名称,然后使用命令提示符中的命令.为此浪费了3个小时. - 阿比

在我的情况下,包名称是用小写字母写的,虽然包名是大写的.阿比,非常感谢.

  • 但是如何在不删除包名的情况下从命令提示符运行它,我需要包名称 (8认同)

sgo*_*les 27

Exception in thread "main" java.lang.NoClassDefFoundError  
Run Code Online (Sandbox Code Playgroud)

java尝试查找.class文件的地方之一是您当前的目录.因此,如果您的.class文件存在C:\java,则应将当前目录更改为该目录.

要更改目录,请在提示符处键入以下命令,然后按Enter键:

cd c:\java  
Run Code Online (Sandbox Code Playgroud)

. 告诉java你的类路径是你的本地目录.

Executing your program using this command should correct the problem:
java -classpath . HelloWorld  
Run Code Online (Sandbox Code Playgroud)


小智 14

如果你的包是helloworld你要去你的包的父目录,那么运行:

java helloworld.HelloWorld
Run Code Online (Sandbox Code Playgroud)


Kon*_*rin 11

像这样运行:

java -jar HelloWorld.jar
Run Code Online (Sandbox Code Playgroud)


Sco*_*Izu 5

参见http://scottizu.wordpress.com/2013/08/28/fixing-the-exception-in-thread-main-java-lang-noclassdeffounderror-in-eclipse/

这是可以从Windows命令提示符运行的Java命令的长格式:

"C:\Program Files\Java\jdk1.6.0_18\bin\javac.exe" -classpath "C:\Users\Scott\workspace\myproject" com\mycompany\myapp\HelloWorld.java
"C:\Program Files\Java\jdk1.6.0_18\bin\java.exe" -classpath "C:\Users\Scott\workspace\myproject" com.mycompany.myapp.HelloWorld
Run Code Online (Sandbox Code Playgroud)
  1. 这些命令可以在任何目录中运行,这意味着您不必位于HelloWorld.java文件所在的目录中。
  2. 第一行编译您的HelloWorld.java文件,创建一个HelloWorld.class文件。
  3. 第二行运行HelloWorld.class文件。
  4. -classpath告诉java在每个命令中在哪里寻找指定文件
  5. Java编译器(javac.exe)期望java文件相对于类路径的位置(即,该文件位于C:\ Users \ Scott \ workspace \ myproject \ com \ mycompany \ myapp \ HelloWorld.java)
  6. Java(java.exe)需要相对于类路径的包(即com.mycompany.myapp)和类(HelloWorld)(即文件位于C:\ Users \ Scott \ workspace \ myproject \ com \ mycompany \ myapp \ HelloWorld.class)

注意,类路径的末尾没有斜杠。javac.exe命令期望文件以“ .java”结尾。java.exe命令需要完整的类名,并且不能以“ .class”结尾。

有几种方法可以简化这些命令:

  1. 您不必指定java.exe的完整路径。将Java添加到Windows路径(运行-> sysdm.cpl->高级选项卡->环境变量->选择路径->编辑->附加“; C:\ Program Files \ Java \ jdk1.6.0_18 \ bin \”) 。或者,您可以附加JAVA_HOME并创建该环境变量。
  2. 您不必输入整个类路径(即,您可以只使用-classpath“。”)。输入您将要使用的目录:

    cd“ C:\ Users \ Scott \ workspace \ myproject \”

  3. 您可以使用默认软件包(将HelloWorld.java文件目录放在工作目录中,而不使用Java软件包指令)

如果进行了这些更改,则将运行以下内容(并且您可以省去-classpath“。”):

cd "C:\Users\Scott\workspace\myproject\"
javac -classpath "." HelloWorld.java
java -classpath "." HelloWorld
Run Code Online (Sandbox Code Playgroud)


tal*_*las 3

NoClassDefFounError 本身的 javadoc 将是一个很好的开始(此处),然后我会建议您清理并重建您的项目。