线程'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你的项目。
这是可以从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
- 这些命令可以从任何目录运行,这意味着你不必在你的HelloWorld.java文件所在的目录中。
- 第一行编译你的HelloWorld.java文件,创build一个HelloWorld.class文件。
- 第二行运行HelloWorld.class文件。
- -classpath告诉java在每个命令中查找指定文件的位置
- Java编译器(javac.exe)需要java文件相对于类path的位置(即文件位于C:\ Users \ Scott \ workspace \ myproject \ com \ mycompany \ myapp \ HelloWorld.java)
- 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”结尾。
有几种方法可以简化这些命令:
- 您不必指定java.exe的整个path。 将Java添加到Windowspath(运行 – > sysdm.cpl->高级选项卡 – >环境variables – >selectpath – >编辑 – >追加“; C:\ Program Files \ Java \ jdk1.6.0_18 \ bin \”) 。 或者你可以附加JAVA_HOME并创build该环境variables。
-
您不必input整个类path(即,您可以只使用-classpath“。”)。 进入您将要工作的目录:
cd“C:\ Users \ Scott \ workspace \ myproject \”
-
您可以使用默认包(将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).`
CLASSPATH
variables需要包含Java程序.class文件所在的目录。 你可以包括'。' 在CLASSPATH
中表示应该包含当前目录。
set CLASSPATH=%CLASSPATH%;.
你的CLASSPATH
需要知道你的HelloWorld
类的位置。
简单来说,你应该追加点.
(表示当前目录),如果您正在DOS提示符下运行javac
和java
命令,则在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它。
- 尝试更改CLASSPATH,以包括类库,
set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
- 将当前目录更改为父目录(包文件夹),并厌倦了
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