线程'main'中的exceptionjava.lang.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 

你能告诉我根本原因吗?

我发现了另一个共同的原因。 如果您使用IDE(例如eclipse)在包中创buildjava文件,则可以在java文件的顶部find包名称,如“package pkgName”。 如果您尝试从命令提示符运行此文件,您将得到NoClassDefFoundError错误。 从java文件中删除软件包名称并使用命令提示符中的命令。 为此浪费了3个小时。 – 阿比

 Exception in thread "main" java.lang.NoClassDefFoundError 

java试图find你的.class文件的地方之一就是你的当前目录。 所以如果你的.class文件在C:\java ,你应该改变你的当前目录。

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

 cd c:\java 

这个. 告诉java你的类path是你的本地目录。

 Executing your program using this command should correct the problem: java -classpath . HelloWorld 

如果你的软件包是helloworld你会去你的软件包的父目录然后运行:

 java helloworld.HelloWorld 

像这样运行它:

 java -jar HelloWorld.jar 

NoClassDefFounError的javadoc本身是一个好的开始( 在这里) ,然后我会build议你清理并重build你的项目。

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

这是可以从Windows命令提示符运行的Java命令的一种长forms:

 "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 
  1. 这些命令可以从任何目录运行,这意味着你不必在你的HelloWorld.java文件所在的目录中。
  2. 第一行编译你的HelloWorld.java文件,创build一个HelloWorld.class文件。
  3. 第二行运行HelloWorld.class文件。
  4. -classpath告诉java在每个命令中查找指定文件的位置
  5. Java编译器(javac.exe)需要java文件相对于类path的位置(即文件位于C:\ Users \ Scott \ workspace \ myproject \ com \ mycompany \ myapp \ HelloWorld.java)
  6. Java(java.exe)需要相对于类path的软件包(即com.mycompany.myapp)和类(HelloWorld)(即该文件位于C:\ Users \ Scott \ workspace \ myproject \ com \ mycompany \ myapp \ HelloWorld.class文件)

注意classpath在最后没有斜线。 javac.exe命令期望文件以“.java”结尾。 java.exe命令需要完整的类名,并不以“.class”结尾。

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

  1. 您不必指定java.exe的整个path。 将Java添加到Windowspath(运行 – > sysdm.cpl->高级选项卡 – >环境variables – >selectpath – >编辑 – >追加“; C:\ Program Files \ Java \ jdk1.6.0_18 \ bin \”) 。 或者你可以附加JAVA_HOME并创build该环境variables。
  2. 您不必input整个类path(即,您可以只使用-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 

这是最后的工作。

 `@echo off set path=%path%;C:\Program Files\Java\jdk1.7.0_71\bin; set classpath=C:\Program Files\Java\jdk1.7.0_71\lib; cd <packageDirectoryName> javac .\trainingPackage\HelloWorld.java cd .. java trainingPackage.HelloWorld REM (Make sure you are on the parent directory of the PackageName and not inside the Packagedirectory when executing java).` 

CLASSPATHvariables需要包含Java程序.class文件所在的目录。 你可以包括'。' 在CLASSPATH中表示应该包含当前目录。

 set CLASSPATH=%CLASSPATH%;. 

你的CLASSPATH需要知道你的HelloWorld类的位置。

简单来说,你应该追加点. (表示当前目录),如果您正在DOS提示符下运行javacjava命令,则在CLASSPATH

我遇到了同样的问题,并且偶然发现了“Build Main Project F11”的解决scheme。 IDE提出了一个“选项”,我可能想在Projectconfiguration对话框的Build> Compiling部分取消选中“Compile on Save”。 取消选中“Complile on Save”,然后按照惯例(对我来说)“Clean and Build”为我做了诀窍。

如果以上解决scheme尝试相同的问题,但没有工作。 我不得不通过我的Java代码才发现主函数不能被识别,因为没有空间btw它和(string)即初始代码:

 public static void main(String[]args){ 

工作代码。

 public static void main (String[]args){ 

希望我帮助了一个人。

在cmd提示符下键入以下内容,在您的文件夹中:

 set classpath=%classpath%;.; 

我有这个错误,因为我有一个包内的文件。 所以我必须打电话给我的foo包:

java foo.HelloWorld

这里的问题是设置环境和类文件的运行。 一个。 要设置环境path,请运行以下命令:set path = C:\ Program Files(x86)\ Java \ jdk1.7.0 \ bin b。 从包中运行程序,如com.test.TestJavaClass

命令:java com.test.TestJavaClass

这里的一般问题是我们从src / package / name这个包里面运行它。 我们不应该包含src,包名就够了。

简单易用的解决scheme:通过原始项目导出为zip文件, 删除原始项目目录并将项目从zip文件导回,解决了这个问题(NetBeans)。

试着做

 javac Hello.java 

然后,如果没有编译器错误(它不应该这样做,因为我看不到在你的程序中的任何错误),然后键入

java Hello

如果你想'编译和执行'你使用任何IDE(如eclipse)创build的任何Java文件,只需运行下面的命令:

编译: javac Users\dhiraj01\workspace\Practice\src\PracticeLogic\Logics.java

执行: java -classpath Users\dhiraj01\workspace\Practice\src\ PracticeLogic.Logics

我花了四个小时尝试各种排列和searchbuild议。

最后,发现这个职位工作,但不是最好的解决scheme来改变原来的代码来testing它。

  1. 尝试更改CLASSPATH,以包括类库, set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
  2. 将当前目录更改为父目录(包文件夹),并厌倦了java <packageName>.<className>也尝试了java ..\<packageName>.<className>

都没有工作。

然而,第一个反应就是有效 非常感谢你阿比!

“我发现了另外一个常见的原因,如果你使用IDE这样的Eclipse来创build一个java文件,你可以在你的java文件的顶部find包名称,比如”package pkgName“,如果你试图从命令提示,你会得到NoClassDefFoundError错误,从java文件中删除包名,并在命令提示符下使用这些命令,浪费了3个小时 – Abhi“

好奇的是,如果有任何其他的方式,使其工作,而不必改变原来的代码? 谢谢!

如果你的Program.java在“src / mypkg / subpkg /”目录下:

去“src”目录

然后编译使用“javac mypkg / subpkg / Program.java”

要运行使用“java mypkg.subpkg.Program.class”

Java的文件:

 package com.beans; public class Flower{ ....... } packages :=> com.beans, java class Name:=> Flower.java, Folder structure (assuming):=> C:\com\beans\Flower.*(both .java/.class exist here) 

那么执行它有两种方法:

 1. Goto top Folder (here its C:\>), then : C:> java com.beans.Flower 2. Executing from innermost folder "beans" here (C:\com\beans:>), then: C:\com\beans:> java -cp ./../.. com.beans.Flower