线程“主”java.lang.NoClassDefFoundError 中的异常:
Posted
技术标签:
【中文标题】线程“主”java.lang.NoClassDefFoundError 中的异常:【英文标题】:exception in thread 'main' java.lang.NoClassDefFoundError: 【发布时间】:2011-09-14 02:49:23 【问题描述】:以下程序抛出错误:
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
你能告诉我根本原因吗?
【问题讨论】:
我怀疑这是问题所在,但 JAVA_HOME 不应包含bin
。在我的系统上,我这样做: JAVA6_HOME=c:\sdks\jdk1.6.0_18 JAVA_HOME=%JAVA6_HOME% PATH=%PATH%;%JAVA_HOME%\bin
【参考方案1】:
我发现了另一个常见的原因。如果您使用 Eclipse 之类的 IDE 在包中创建 java 文件,您会在 java 文件的顶部找到包名称,例如“package pkgName”。如果您尝试从命令提示符运行此文件,您将收到 NoClassDefFoundError 错误。从 java 文件中删除包名称并使用命令提示符中的命令。为此浪费了3个小时。 -- 阿比
【讨论】:
但是如何在不删除包名的情况下从命令提示符运行它,我需要包名【参考方案2】: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
【讨论】:
【参考方案3】:如果你的包是helloworld
,你会去你的包的父目录然后运行:
java helloworld.HelloWorld
【讨论】:
【参考方案4】:像这样运行它:
java -jar HelloWorld.jar
【讨论】:
我完全忘记了应该使用该选项调用 jar-packed 应用程序.. :/ 干杯!【参考方案5】:见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
【讨论】:
【参考方案6】:这是最终奏效的方法。
`@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).`
【讨论】:
【参考方案7】:NoClassDefFounError 本身的 javadoc 将是一个好的开始(here),然后我会建议您清理并重建您的项目。
【讨论】:
我刚刚对我的项目执行了清理和构建,它工作正常,我在尝试调试时遇到了这个错误,但是在 NetBeans IDE 8.1 中进行了简单的清理和构建工作。先试试这个。【参考方案8】:CLASSPATH
变量需要包含您的 Java 程序 .class 文件所在的目录。您可以包括“。”在CLASSPATH
中表示应包含当前目录。
set CLASSPATH=%CLASSPATH%;.
【讨论】:
【参考方案9】:您的CLASSPATH
还需要知道您的HelloWorld
班级的位置。
简单来说,如果您在 DOS 提示符下运行 javac
和 java
命令,则应在 CLASSPATH
中附加点 .
(表示当前目录)。
【讨论】:
【参考方案10】:我遇到了同样的问题,偶然发现了“构建主项目 F11”的解决方案。 ide 提出了一个“选项”,我可能想取消选中“保存时编译” 在项目配置对话框的构建 > 编译部分。 取消选中“保存时编译”,然后执行通常的(对我而言)“清理和构建”对我有用。
【讨论】:
【参考方案11】:在文件夹中的 cmd 提示符下键入以下内容:
set classpath=%classpath%;.;
【讨论】:
【参考方案12】: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
【讨论】:
【参考方案13】:这里的问题是设置环境和类文件的运行。 一种。要设置环境路径,请运行以下命令: 设置路径=C:\Program Files (x86)\Java\jdk1.7.0\bin 湾。从 com.test.TestJavaClass 之类的包中运行程序
命令:java com.test.TestJavaClass
这里的一般问题是我们从像 src/package/name 这样的包内部运行它。 src不要加,包名就够了。
【讨论】:
【参考方案14】:尝试做
javac Hello.java
然后,如果它没有出现编译器错误(它不应该这样做,因为我在你的程序中看不到任何错误),然后输入
java Hello
【讨论】:
【参考方案15】:如果您想“编译并执行”您使用任何 IDE(如 eclipse)创建的任何 java 文件,只需运行以下命令:
编译:
javac Users\dhiraj01\workspace\Practice\src\PracticeLogic\Logics.java
执行:
java -classpath Users\dhiraj01\workspace\Practice\src\ PracticeLogic.Logics
【讨论】:
【参考方案16】:如果您的 Program.java 位于“src/mypkg/subpkg/”目录中:
转到“src”目录
然后编译使用“javac mypkg/subpkg/Program.java”
要运行使用“java mypkg.subpkg.Program.class”
【讨论】:
【参考方案17】:我终于发现这是 Apache Netbeans 编辑器的一个错误:
以下步骤将消除错误:
-
将文件名和类重命名为 Abc
关闭编辑器
重新打开编辑器
将文件名和类从 Abc 重命名为以前的名称
现在调试项目 (Ctrl+F5) 工作正常
希望对您有所帮助,如果您使用的是新的 Apache Netbeans(不是旧的 Netbeans)
【讨论】:
【参考方案18】:我有这个问题,我使用了 maven。我只需点击 maven projects ant 然后命名
project-> plugins -> clean -> and button run
.
【讨论】:
【参考方案19】:您可以在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>
【讨论】:
【参考方案20】:在你的类路径中添加 jar。
例如,如果您有 NoClassDefFoundError
用于类 XXXXXX
,则获取包含该类的 jar 并将其手动添加到您的类路径中。
它对我有用。希望它也对你有用。
【讨论】:
以上是关于线程“主”java.lang.NoClassDefFoundError 中的异常:的主要内容,如果未能解决你的问题,请参考以下文章
Android 异步操作Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )