以下程序引发错误:
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
你能告诉我根本原因吗?
答案 0 :(得分:66)
我找到了另一个常见的原因。如果使用像eclipse这样的IDE在包内创建java文件,您将在java文件的顶部找到包名称,如“package pkgName”。如果您尝试从命令提示符运行此文件,您将收到NoClassDefFoundError错误。从java文件中删除包名称,然后使用命令提示符中的命令。为此浪费了3个小时。 - 阿比
就我而言,包名是用小写字母写的,虽然包名是大写的。阿比,非常感谢。
答案 1 :(得分:27)
Exception in thread "main" java.lang.NoClassDefFoundError
java尝试查找.class
文件的地方之一是您当前的目录。因此,如果您的.class
文件位于C:\java
,则应将当前目录更改为该目录。
要更改目录,请在提示符处键入以下命令,然后按Enter键:
cd c:\java
这个.
告诉java你的类路径是你的本地目录。
Executing your program using this command should correct the problem:
java -classpath . HelloWorld
答案 2 :(得分:14)
如果您的软件包是helloworld
,那么您将转到软件包的父目录,然后运行:
java helloworld.HelloWorld
答案 3 :(得分:11)
像这样运行:
java -jar HelloWorld.jar
答案 4 :(得分:5)
这是可以从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
请注意,类路径末尾没有斜杠。 javac.exe命令期望文件以“.java”结尾。 java.exe命令需要完整的类名,并且不以“.class”结尾。
有几种方法可以简化这些命令:
您不必输入整个类路径(即,您只需使用-classpath“。”)。输入您将要使用的目录:
cd“C:\ Users \ Scott \ workspace \ myproject \”
您可以使用默认包(将HelloWorld.java文件目录放在工作目录中,不要使用Java包指令)
如果你进行了这些更改,你就可以运行这样的东西(你可能可以省略-classpath“。”):
cd "C:\Users\Scott\workspace\myproject\"
javac -classpath "." HelloWorld.java
java -classpath "." HelloWorld
答案 5 :(得分:4)
这是最终奏效的。
`@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).`
答案 6 :(得分:3)
NoClassDefFounError本身的javadoc将是一个好的开始(here),然后我建议你清理并重建你的项目。
答案 7 :(得分:1)
您的CLASSPATH
也需要知道HelloWorld
课程的位置。
简单来说,如果从DOS提示符运行.
和CLASSPATH
命令,则应在javac
中附加点java
(表示当前目录)。
答案 8 :(得分:1)
如果同样的问题尝试了上述解决方案但没有效果。 我不得不通过我的java代码才发现主函数无法被识别,因为没有空格btw它和(String) 即初始代码:
public static void main(String[]args){
工作代码。
public static void main (String[]args){
希望我能帮助别人。
答案 9 :(得分:1)
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
答案 10 :(得分:1)
我遇到了同样的问题,偶然发现了“Build Main Project F11”的解决方案。 ide提出了一个“选项”,我可能想要取消选中“Compile on Save” 在Build&gt;编译“项目配置”对话框的一部分。 取消选中'保存时的Complile',然后按常规(对我而言)'清理和构建'为我做了诀窍。
答案 11 :(得分:1)
CLASSPATH
变量需要包含Java程序.class文件所在的目录。你可以包括'。'在CLASSPATH
中表示应包含当前目录。
set CLASSPATH=%CLASSPATH%;.
答案 12 :(得分:0)
您可以在pom.xml
中找到有关所需库的信息,使用Apache Maven之类的工具来构建Java应用程序要容易得多。
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.20</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>24.0-jre</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-assistedinject</artifactId>
<version>4.2.0</version>
</dependency>
答案 13 :(得分:0)
答案 14 :(得分:0)
我终于发现这是Apache Netbeans编辑器的错误:
以下步骤将消除错误:
希望在您使用新的Apache Netbeans(而不是旧的Netbeans)时有所帮助
答案 15 :(得分:0)
将jar添加到您的类路径中。
例如,如果您的类NoClassDefFoundError
有XXXXXX
,请获取包含该类的jar,然后将其手动添加到您的类路径中。
对我有用。希望它也对您有用。
答案 16 :(得分:0)
如果您的Program.java位于“src / mypkg / subpkg /”目录中:
转到“src”dir
然后编译使用“javac mypkg / subpkg / Program.java”
运行使用“java mypkg.subpkg.Program.class”
答案 17 :(得分:0)
如果您想编译并执行&#39;您使用任何IDE(如eclipse)创建的任何java文件,只需运行以下命令:
<强>编译:强>
echo '<b>What happened: </b><div id="what_happened" style="max-height:600px; overflow:auto;">' . $player_complaints_offence . '</div></b><p></fieldset><p>';
执行:
javac Users\dhiraj01\workspace\Practice\src\PracticeLogic\Logics.java
答案 18 :(得分:0)
尝试
javac Hello.java
然后,如果它没有编译器错误(它不应该这样做因为我看不到程序中的任何错误),那么输入
java Hello
答案 19 :(得分:0)
我花了四个小时尝试各种排列&amp;搜索建议。
最后,发现这篇文章有效,但不是改变原始代码进行测试的最佳解决方案。
set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
java <packageName>.<className>
也尝试了java ..\<packageName>.<className>
都没有奏效。
然而,仅第一反应就起作用了。非常感谢Abhi !!!
“我发现了另一个常见的原因。如果你使用像eclipse这样的IDE在包内创建java文件,你会在你的java文件的顶部找到包名称,如”package pkgName“。如果你试图运行它从命令提示符下来的文件,你将得到NoClassDefFoundError错误。从java文件中删除包名并在命令提示符下使用命令。浪费了3个小时.-- Abhi“
好奇是否还有其他方法可以让它无需更改原始代码?谢谢!
答案 20 :(得分:0)
简单&amp;简单的解决方案:我通过导出原始项目到zip文件解决了这个问题(NetBeans),删除原始项目目录并导入从zip文件返回项目。
答案 21 :(得分:0)
这里的问题是设置环境和类文件的运行。 一个。要设置环境路径,请运行以下命令: set path = C:\ Program Files(x86)\ Java \ jdk1.7.0 \ bin 湾从包中运行程序,如com.test.TestJavaClass
命令:java com.test.TestJavaClass
这里的一般问题是我们从包内部运行它,如src / package / name。 我们不应该包含src,包名就足够了。
答案 22 :(得分:0)
我遇到了这个错误,因为我在包中有我的文件。 所以我的foo包我不得不称之为:
java foo.HelloWorld
答案 23 :(得分:0)
在文件夹中的cmd提示符下键入以下内容:
set classpath=%classpath%;.;