繁体   English   中英

线程“主”java.lang.NoClassDefFoundError 中的异常:

[英]exception in thread 'main' 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

你能告诉我根本原因吗?

我找到了另一个共同的原因。 If you create the java file inside a package using IDE like eclipse, you will find the package name on the top of your java file like "package pkgName". 如果您尝试从命令提示符运行此文件,您将收到 NoClassDefFoundError 错误。 从 java 文件中删除 package 名称并使用命令提示符中的命令。 为此浪费了3个小时。 ——阿比

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  

如果您的 package 是helloworld您将 go 到您的 package 的父目录然后运行:

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
  1. 这些命令可以从任何目录运行,这意味着您不必位于 HelloWorld.java 文件所在的目录中。
  2. 第一行编译您的 HelloWorld.java 文件,创建一个 HelloWorld.class 文件。
  3. 第二行运行 HelloWorld.class 文件。
  4. -classpath 告诉 java 在每个命令中查找指定文件的位置
  5. The Java compiler (javac.exe) expects the location of the java file, relative to the classpath (ie the file is located at C:\Users\Scott\workspace\myproject\com\mycompany\myapp\HelloWorld.java)
  6. Java (java.exe) expects the package (ie com.mycompany.myapp) and class (HelloWorld), relative to the classpath (ie the file is located at C:\Users\Scott\workspace\myproject\com\mycompany\myapp \HelloWorld.class)

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

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

  1. 您不必指定 java.exe 的整个路径。 Add Java to the Windows Path (Run->sysdm.cpl->Advanced Tab->Environment Variables->Select Path->Edit->Append ";C:\Program Files\Java\jdk1.6.0_18\bin\") . 或者您可以 append JAVA_HOME 并创建该环境变量。
  2. 您不必输入整个类路径(即,您可以只使用 -classpath ".")。 输入您将在其中工作的目录:

    cd "C:\Users\Scott\workspace\myproject\"

  3. You can use the default package (put the HelloWorld.java file directory in your working directory and don't use the Java package directive)

如果您进行这些更改,您将运行类似这样的操作(并且您可能可以省略 -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 将是一个好的开始( 此处) ,然后我建议您清理并重建您的项目。

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

set classpath=%classpath%;.;

我遇到了同样的问题,并偶然发现了“构建主项目 F11”的解决方案。 ide 提出了一个“选项”,我可能想在项目配置对话框的“构建”>“编译”部分中取消选中“保存时编译”。 取消选中“保存时编译”,然后执行通常的(对我而言)“清理和构建”对我有用。

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

您的CLASSPATH还需要知道HelloWorld class 的位置。

简单来说,您应该 append dot . 如果您在 DOS 提示符下运行javacjava命令,则在CLASSPATH中(表示当前目录)。

CLASSPATH变量需要包含 Java 程序所在的目录。class 文件所在的目录。 您可以包括“。” CLASSPATH中表示应包含当前目录。

set CLASSPATH=%CLASSPATH%;.

我有这个错误是因为我的文件在 package 中。 所以我的 foo package 我不得不像这样打电话:

java foo.HelloWorld

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

命令:java com.test.TestJavaClass

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

简单而简单的解决方案:我通过将原始项目导出到 zip 文件中,删除原始项目目录并从 zip 文件中导入项目来解决了这个问题(NetBeans)。

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

最后,发现这篇文章有效,但不是更改原始代码来测试它的最佳解决方案。

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

都没有奏效。

但是,仅第一个响应就起作用了。 非常感谢阿比!!!

"I found one another common reason. If you create the java file inside a package using IDE like eclipse, you will find the package name on the top of your java file like "package pkgName". If you try to run this file from command提示,您将收到 NoClassDefFoundError 错误。从 java 文件中删除 package 名称并使用命令提示符中的命令。为此浪费了 3 个小时。--Abhi"

好奇是否有任何其他方法可以使其工作而无需更改原始代码? 谢谢!

在上述解决方案中尝试过同样的问题,但都没有奏效。 我不得不通过我的 java 代码 go 才发现主要的 function 无法识别,因为它和初始代码没有空格:

public static void main(String[]args){

工作代码。

public static void main (String[]args){

希望我帮助了某人。

尝试做

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

如果您的 Program.java 位于“src/mypkg/subpkg/”目录中:

go 到“src”目录

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

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

我终于发现这是 Apache Netbeans 编辑器的错误:

以下步骤将消除错误:

  1. 将文件名和 class 重命名为 Abc
  2. 关闭编辑器
  3. 重新打开编辑器
  4. 将文件名 & class 从 Abc 重命名为以前的名称
  5. 现在调试项目(Ctrl+F5)工作正常

希望对您有所帮助,如果您使用的是新的 Apache Netbeans(不是旧的 Netbeans)

我有这个问题,我使用了 maven。 我只需单击 maven 项目 ant 然后命名

project-> plugins -> clean -> and button run

在此处输入图像描述

You can find information about required libraries inside pom.xml , it is much easier to use tools like Apache Maven to build java applications.

    <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>

在您的类路径中添加 jar。

例如,如果您有 class XXXXXXNoClassDefFoundError ,请获取包含 class 的 jar 并将其手动添加到您的类路径中。

这个对我有用。 希望它也对你有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM