当前位置: 首页 > 知识库问答 >
问题:

如何解析ClassNotFoundException?

阎经武
2023-03-14

我正在尝试运行一个Java应用程序,但是得到了这个错误:

java.lang.ClassNotFoundException:

冒号后面是丢失的类的位置。但是,我知道那个位置不存在,因为类位于其他地方。如何更新该类的路径?和类路径有关系吗?

共有3个答案

乌璞瑜
2023-03-14

这是我目前找到的最好的解决方案。

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

  • HelloWorld(主类)
  • SupportClass
  • UtilClass

定义此包的文件物理存储在d:\myprogram(在Windows上)或/home/user/myprogram(在Linux上)目录下。

注意:无论您当前的位置是什么,您都必须执行上面的Java命令。但对于javac来说,情况并非如此。对于编译,您甚至可以直接进入.文件所在的目录,并直接执行javac classname.Java

林君博
2023-03-14

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

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

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

在第二个实例中,对于jar文件,它将在jar文件中搜索该类。jar文件实际上只是一个压缩的目录集合,如上所示。如果解压缩一个jar文件,就会得到一堆遵循上述模式的目录和类文件。

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

C:/MyProject/类;C:/MyProject/lib/stuff.jar;C:/MyProject/lib/otherstuff.jar

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

当您获得ClassNotFoundException时,这意味着JVM已经遍历了整个类路径,但没有找到您试图引用的类。解决方法,就像Java世界中经常出现的那样,是检查您的类路径。

您可以在命令行上定义一个类路径,方法是使用Java-cp,然后使用您的类路径。在Eclipse这样的IDE中,您将有一个菜单选项来指定您的类路径。

隗锐进
2023-03-14

您的类路径被破坏(这在Java世界中是一个非常常见的问题)。

根据启动应用程序的方式,您需要将参数修改为-cp、manifest.mf中的类路径条目或磁盘布局。

 类似资料:
  • 我试图编写简单的java代码,在控制台上显示MongoDB集合。我在类路径中添加了mongodb-driver-3.0.0.jar。 但是当我尝试执行代码时,它在数据库连接的行处给了我以下错误: 线程“main”java.lang.noClassDeffounderror:com/mongoDb/connection/bufferprovider在com.chintan.app.mongodbjd

  • 问题内容: 如何解析包含数据的XML 我们如何解析xml并获取包含在???中的数据? 问题答案: (http://www.java2s.com/Code/Java/XML/GetcharacterdataCDATAfromxmldocument.htm)

  • 问题内容: 我正在使用NewtonsoftJson库来解析json,但我不知道如何使用它。我使用JObject解析了字符串。当我在即时窗口中输出JObject实例的值时,我得到了:- 我应该怎么做才能获得这个工作的价值? 问题答案: 我个人更喜欢将JavaScriptSerializer与.NET环境中的JSON一起使用。默认情况下,它将返回Dictionary结果,但可用于解析到自定义对象(或者

  • exception=org.springframework.jdbc.badsqlgrammareXception:gulfnet.tts.inthanon.data.product.mapper.catalogmapper.insertCommunityItemlist(批索引#1)失败。原因:java.sql.BatchUpdateException:批条目0 INSERT ALL被中止。调用

  • 当我尝试调试和部署我的android应用程序(在android Studio0.9中)时,我得到以下错误: 为了使事情清楚,这里有一个我的行动简史: null 从那时起,我就在将multiDex添加到我的项目中之后,不断地得到所描述的错误,方法如下:使用Gradle将外部库拆分到单独的dex文件中,以解决Android Dalvik 64K方法的限制。 这是我的build.gradle文件: 我还

  • 我很难理解如何解析javax.ws.rs.core.Response。有些人指出使用InputStream,但我不理解它是如何工作的,因为返回类型是响应。getEntity()的类型为Object。例如: NetBeans 抱怨说,我需要将 Object 类型转换为 InputStream。响应将由XML组成,我只是希望能够使用DOM解析它。我无法从javax.ws.rs.core.Respons