java classnotfound_关于Java:如何解决ClassNotFoundException?

我正在尝试运行Java应用程序,但出现此错误:

java.lang.ClassNotFoundException:

冒号到达后,缺少该类的位置。 但是,我知道该位置不存在,因为该类位于其他位置。 如何更新该课程的路径? 它与类路径有关吗?

您必须将缺少类的罐子添加到classptah

如果您的课程有课程,请转到包含课程的文件夹。 例如,如果package是package test.abc,则在test之前转到文件夹,然后执行java -cp。 test.abc.CLASSNAME(不带.class)。 如果没有包,请转到包含class的文件夹,然后说java -cp。 班级名称

一个类没有部署到您的运行时(例如缺少jar),或者该类在给定的类加载器中不可见,请检查此工具以帮助解决这些问题:jhades.org

有时我也会遇到这个问题。 该异常明显违反了在异常消息中声明所有必要上下文的规则。 它应该提到它尝试查找的内容,类路径中的内容。 请提出更好的异常消息。 不要让我们寻找可以帮助解决问题的信息。

类路径是要从中加载类的位置的列表。

这些"位置"可以是目录,也可以是jar文件。

对于目录,JVM将遵循预期的模式加载类。如果我的类路径中有目录C:/ myproject / classes,并且尝试加载类com.mycompany.Foo,它将在classes目录下查找名为com的目录,然后在该目录下查找名为mycompany的目录,并最后,它将在该目录中查找名为Foo.class的文件。

在第二种情况下,对于jar文件,它将在jar文件中搜索该类。实际上,jar文件只是上述目录的压缩集合。如果解压缩jar文件,则会按照上述模式获得一堆目录和类文件。

因此,JVM在尝试加载类定义时会从头到尾遍历类路径,以查找该类的定义。例如,在classpath中:

C:/ myproject / classes; C:/myproject/lib/stuff.jar; C:/myproject/lib/otherstuff.jar

JVM将尝试首先在目录类中查找,然后在stuff.jar中查找,最后在otherstuff.jar中查找。

当您收到ClassNotFoundException时,表示JVM遍历了整个类路径,但未找到您尝试引用的类。在Java世界中,解决方案通常是检查类路径。

您可以在命令行中输入java -cp,然后输入您的类路径来定义类路径。在诸如Eclipse之类的IDE中,您将具有一个菜单选项来指定您的类路径。

您的类路径已损坏(这是Java世界中非常普遍的问题)。

根据启动应用程序的方式,您需要将参数修改为-cp,MANIFEST.MF中的Class-Path条目或磁盘布局。

您能否更偏食?我需要做什么?

您的问题所包含的信息不足,无法提供更具体的答案。考虑添加。

在几乎所有编程环境中,依赖项解析/版本不匹配都是一个非常普遍的问题。我们可以说所有程序都可以解析这样的定义...问题始终是定义在什么地方/在哪里,您指的是哪个版本?

我只是在强调,除了Java世界之外,所有软件都在努力确保找到正确的依赖版本。我可以提到dll-hell,程序包管理器,版本管理器,spring boot物料清单和docker容器作为此问题和可能解决方案的示例。外部代码比例越大,问题越多。

@masterxilo是的,但这不一定是这里的问题,您可能在拨错树。可以说的是类路径已损坏。

这是我到目前为止发现的最佳解决方案。

假设我们有一个名为org.mypackage的包,其中包含以下类:

HelloWorld(主类)

技术支持

实用类

并且定义此软件包的文件实际存储在目录D:\myprogram(在Windows上)或/home/user/myprogram(在Linux上)下。

文件结构将如下所示:

81fce758dbbaaacd970332150bcd1e8e.png

调用Java时,我们指定要运行的应用程序的名称:org.mypackage.HelloWorld。但是,我们还必须告诉Java在哪里寻找定义我们程序包的文件和目录。因此,要启动该程序,我们必须使用以下命令:

df44840037b7f642701832d6a8a20897.png

NOTE: You have to execute the above java command no matter what your current location is. But this is not the case for javac. For

compiling you can even directly go into the directory where you have

your .java files and directly execute javac ClassName.java.

如果您知道类的路径或包含该类的jar,则在运行它时将其添加到您的类路径中。您可以使用此处提到的类路径:

在Windows上

java -classpath .;yourjar.jar YourMainClass

在UNIX / Linux上

java -classpath .:yourjar.jar YourMainClass

如果您使用Maven,请尝试这些。我将maven用于我的项目,当我执行mvn clean install并尝试运行程序时,它将引发异常。因此,我清理了项目并再次运行它,它对我有用。

我使用Eclipse IDE。

对于运行Junit测试时的"找不到类异常",请尝试运行一次mvn clean test。它将编译所有测试类。

运行" mvn clean test"时,您位于哪个目录?与POM在同一目录中吗?

是。从存在pom文件的目录中运行该文件。

将jar文件的完整路径添加到CLASSPATH。

在Linux中使用:export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"。其他工作方式(无需编辑CLASSPATH)是将jar压缩到当前项目文件夹中。

方式对我不起作用:

1)在jar文件的完整路径中使用-cp选项。

2)在当前文件夹中时,仅对jar名称使用-cp

3)将jar复制到当前项目文件夹

4)将jar复制到Java jar的标准位置(/ usr / share / java)

在mysql-connector-java.5-*。jar中针对com.mysql.jdbc.Driver类报告了该解决方案,该解决方案在具有OpenJDK版本1.7的Linux上运行

只有解压缩JAR对我有用,其他解决方案都没有

采用 ';'作为分隔符。如果您的环境变量设置正确,则应该看到您的设置。如果您的PATH和CLASSPATH是正确的,则Windows应该可以识别这些命令。安装Java时,无需重新启动计算机。

在Windows(分号)上,在Unix / Linux上是:(冒号)

要通过命令行将类的位置添加到类路径中,只需在运行它时添加-cp或-classpath以及类的位置。即

java -cp"c:/location/of/file" YourProgram

或者,如果您正在运行诸如eclipse之类的IDE,则可以右键单击project -> build path -> configure build path

并将包含您的类的外部JAR添加到构建路径,则它应该可以正常工作。

如果您正在使用Maven

尝试更新所有项目并强制创建快照。

它将也清理并重建所有类路径。

它解决了我的问题。

我已经做了

1.使缓存无效并重新启动

2.重建我的项目解决了问题

如果您的类路径不正确,可能会发生

让我们在相同的项目名称下放置一个可序列化的类和可反序列化的类。您运行序列化类,在特定文件夹中创建一个序列化对象。现在您需要反序列化的数据。同时,如果您更改项目的名称,它将无法正常工作。您必须先运行可序列化的类,然后反序列化文件。

我也遇到了这个问题,并尝试了所有其他解决方案。我的HTML文件夹中没有.class文件,只有.java文件。添加.class文件后,该程序即可正常运行。

转到顶部,并删除导入语句(如果有的话),然后重新导入该类。但是,如果不是这种情况,请进行清理然后再构建。您正在使用Netbeans还是Eclipse?

我试图使用Process类从C#代码运行.jar。 Java代码可以从eclipse成功运行,但是不能从C#visual studio中运行,甚至不能直接单击jar文件,它总是因ClassNotFoundException:异常而停止。我的解决方案是将Java程序导出为"可运行的JAR文件"而不是" JAR文件"。希望它可以帮助某人。

在Java更新后Windows上可能会发生这种情况,其中缺少旧版本的Java SDK而存在一个新版本。我将检查您的IDE是否使用已安装的Java SDK版本(IntelliJ:CTRL + SHIFT + ALT + S)

如果您添加了多个(第三方)**库并扩展了** Application类

然后可能会发生。

为此,您必须设置multiDexEnabled true并将扩展的Application类替换为MultiDexApplication。

它将解决。

如果您使用Maven,请检查您的pom.xml中是否具有此插件:

org.apache.maven.plugins

maven-shade-plugin

3.2.0

package

shade

它将您的依赖项(异常原因)放到jar中

基本的通用问题-最简单的通用答案;)

根据这些信息,我将假设您可能正在尝试使用一些简单的文本编辑器和某些Command Shell来尝试一种基本的方法来编码,构建/编译和运行诸如" Hello World"之类的简单控制台应用程序。

在休闲情况下会发生此错误:

..\SomePath>javac HelloWorld.java

..\SomePath>java HelloWorld.class

换句话说,使用:

..\SomePath>java HelloWorld

附言添加文件扩展名.class会产生相同的错误。

还请确保在操作系统的环境变量的PATH中具有Java的(JDK / JRE)bin文件夹。(有关更多详细信息,请查阅此文章)

P.P.S我的假设是否正确?

将所有代码放在try块中,然后在catch块中捕获异常

try

{

// code

}

catch(ClassNotFoundException e1)

{

e1.getmessage();

}

这不能解决异常。这隐藏了异常。此外," e1.getmessage()"是a)getMessage()的大写错误和b)不会做太多事情,因为它返回带有消息的字符串,并且您不打印或记录它或进行任何记录!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值