如何解决线程“主”中的异常java.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
你能告诉我根本原因吗?
解决方法
我发现了另一个常见原因。如果使用eclipse之类的IDE在包中创建Java文件,则会在Java文件顶部找到包名,例如\“ package pkgName \”。如果尝试从命令提示符下运行此文件,则会收到NoClassDefFoundError错误。从java文件中删除软件包名称,并在命令提示符下使用命令。为此浪费了3个小时。 -阿比
,
Exception in thread \"main\" java.lang.NoClassDefFoundError
java试图找到您的.class
文件的地方之一是您当前的目录。因此,如果.class
文件位于C:\\java
中,则应将当前目录更改为该目录。
要更改目录,请在提示符下键入以下命令,然后按Enter:
cd c:\\java
这个“ 6”告诉Java您的类路径是您的本地目录。
Executing your program using this command should correct the problem:
java -classpath . HelloWorld
, 如果您的软件包是helloworld
,则转到软件包的父目录,然后运行:
java helloworld.HelloWorld
, 像这样运行它:
java -jar HelloWorld.jar
, 参见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
这些命令可以从任何目录运行,这意味着您不必位于HelloWorld.java文件所在的目录中。
第一行编译您的HelloWorld.java文件,创建一个HelloWorld.class文件。
第二行运行HelloWorld.class文件。
-classpath告诉java在每个命令中在哪里寻找指定文件
Java编译器(javac.exe)期望java文件相对于类路径的位置(即文件位于C:\\ Users \\ Scott \\ workspace \\ myproject \\ com \\ mycompany \\ myapp \\ HelloWorld.java)
Java(java.exe)需要相对于类路径的包(即com.mycompany.myapp)和类(HelloWorld)(即文件位于C:\\ Users \\ Scott \\ workspace \\ myproject \\ com \\ mycompany \\ myapp \\ HelloWorld.class)
注意,类路径的末尾没有斜杠。 javac.exe命令期望文件以\“。java \”结尾。 java.exe命令需要完整的类名,并且不能以\“。class \”结尾。
有几种方法可以简化这些命令:
您不必指定java.exe的完整路径。将Java添加到Windows路径(运行-> sysdm.cpl->高级选项卡->环境变量->选择路径->编辑->附加\“; C:\\ Program Files \\ Java \\ jdk1.6.0_18 \ \ bin \\\“)。或者,您可以追加JAVA_HOME并创建该环境变量。
您不必输入整个类路径(即,您可以只使用-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).`
, NoClassDefFounError本身的javadoc将是一个不错的开始(在这里),然后我建议您清理并重建项目。
, CLASSPATH
变量需要包含Java程序.class文件所在的目录。您可以在CLASSPATH
中包含\'。\',以指示应包含当前目录。
set CLASSPATH=%CLASSPATH%;.
, 您的CLASSPATH
还需要知道HelloWorld
班级的位置。
简而言之,如果您正在DOS提示符下运行javac
和java
命令,则应在CLASSPATH
中附加点.
(表示当前目录)。
, 我遇到了同样的问题,偶然发现了\'Build Main Project F11 \'的解决方案。
想法提出了一个“选项”,我可能想取消选中“在保存时编译”
在“项目”配置对话框的“构建”>“编译”部分中。
取消选中“ Compille on Save”,然后对我来说,执行常规的“ Clean and Build \”就可以了。
, 在文件夹内的cmd提示符下键入以下内容:
set classpath=%classpath%;.;
, 在上述解决方案上尝试过相同的问题,但没有任何效果。
我只需要检查一下我的Java代码,发现主函数无法识别,因为它和(String)之间没有空格
即初始代码:
public static void main(String[]args){
工作代码。
public static void main (String[]args){
希望我能帮助别人。
,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
, 我遇到此错误是因为我的文件位于包装中。
所以我的foo包我必须这样调用:
java foo.HelloWorld
, 这里的问题是设置环境和类文件的运行。
一种。要设置环境路径,请运行以下命令:
设置路径= C:\\ Program Files(x86)\\ Java \\ jdk1.7.0 \\ bin
b。从像com.test.TestJavaClass这样的包中运行程序
命令:java com.test.TestJavaClass
这里的一般问题是我们从src / package / name之类的包内部运行它。
我们不应该包含src,包名称就足够了。
, 简易解决方案:通过将原始项目导出到zip文件,删除原始项目目录并将项目从zip文件导入回来,我解决了这个问题(NetBeans)。
, 尝试做
javac Hello.java
然后,如果它没有编译器错误(因为我看不到您程序中的任何错误,所以不应该这样做),请键入
java Hello
, 如果要“编译并执行”使用任何IDE(例如eclipse)创建的任何Java文件,只需运行以下命令:
编译:
javac Users\\dhiraj01\\workspace\\Practice\\src\\PracticeLogic\\Logics.java
执行:java -classpath Users\\dhiraj01\\workspace\\Practice\\src\\ PracticeLogic.Logics
, 我花了四个小时尝试各种排列和搜索建议。
最后,发现这篇文章有效,但不是更改原始代码进行测试的最佳解决方案。
尝试更改CLASSPATH,以包含类库,set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
将当前目录更改为父目录(package文件夹),累了的java <packageName>.<className>
也尝试了java ..\\<packageName>.<className>
两者都不起作用。
但是,只有第一个响应有效。非常感谢阿比!!!
\“我发现了另一个常见原因。如果您使用eclipse这样的IDE在包中创建Java文件,则会在Java文件顶部找到包名,例如\” package pkgName \“。如果尝试运行此文件,从命令提示符中删除文件,您将收到NoClassDefFoundError错误。从java文件中删除程序包名称,并在命令提示符中使用命令。为此浪费了3个小时。-Abhi \“
好奇是否有其他方法可以使它工作而不必更改原始代码?谢谢!
, 如果您的Program.java位于\“ src / mypkg / subpkg / \”目录中:
转到\“ src \”目录
然后使用\“ javac mypkg / subpkg / Program.java \”进行编译
要运行,请使用\“ java mypkg.subpkg.Program.class \”
, 我终于发现这是Apache Netbeans编辑器的错误:
以下步骤将消除错误:
将文件名和类重命名为Abc
关闭编辑器
重新打开编辑器
将文件名和类从Abc重命名回以前的名称
现在调试项目(Ctrl + F5)可以正常工作
如果您使用的是新的Apache Netbeans(而不是旧的Netbeans),希望对您有所帮助
, 我曾经用过Maven的这个问题。我只是单击Maven项目ant然后命名
project-> plugins -> clean -> and button run
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。