我正在尝试运行一个Java应用程序,但收到以下错误:
java.lang.ClassNotFoundException:
冒号后面是缺少的类的位置。然而,我知道那个地点并不存在,因为班级位于其他地方。我如何更新该类的路径?这与类路径有关吗?
hs1rzwqc1#
我也遇到了这种情况,并尝试了所有其他解决方案。我的HTML文件夹中没有.class文件,我只有.Java文件。一旦我添加了.class文件,程序就可以正常运行。
vlurs2pr2#
将所有代码放在TRY块中,然后在CATCH块中捕获异常
try { // code } catch(ClassNotFoundException e1) { e1.getmessage(); }
lbsnaicq3#
对不起,这个问题我来晚了,但我会用最简单的外行语言给你解释。当你输入‘javac<Programname.java>时,编译器检查程序并发现错误,首先确保你的程序与你在命令提示符下执行的目录相同。然后它为你的程序创建一个.class文件。例如,如果我的程序的名称是Test.java,那么创建的类文件应该是Test.class,它将在下一行执行。有时Java会为你的.class取一个其他的名称,使用这个名称,你就会得到输出。
pbpqsu0x4#
我删除了一些未使用的导入,它为我解决了这个问题。如果你一开始就不去找一个类,你就不可能找不到它。
9wbgstp75#
我在终端运行Java代码,添加类路径的解决方案如下:> java -cp <JAR file> <JAVA Class file>例如,c:\code\prototype-app\target\classes>java -cp ..\prototype-app-1.0-SNAPSHOT.jar com_stree.app.DetectLabels
> java -cp <JAR file> <JAVA Class file>
c:\code\prototype-app\target\classes>java -cp ..\prototype-app-1.0-SNAPSHOT.jar com_stree.app.DetectLabels
我的运行时环境:Windows OS:Windows 10
6fe3ivhb6#
如果你已经把你的项目移到了新机器上或者从git导入了它,那么试试这个。
1.右键单击类>运行方式>运行配置1.移除主类引用1.应用>关闭1.现在再次右键单击类>作为Java应用程序运行。
这对我很管用。
pobjuy327#
在将“Java Language Support”插件从版本0.66.0升级到0.67.0之后,我开始遇到这个问题。
降级使我可以毫无问题地运行相同的代码。
l3zydbqr8#
在我的例子中,作为类未找到异常抛出的类具有与SSL证书相关的属性。关闭eclipse并以“以管理员身份运行”打开,问题就解决了。由于eclipse已经发布了相关许可,它将抛出此类异常。
k5ifujac9#
如果您添加了多个**(第三方)库并扩展了应用程序**类
那么它就有可能发生。
为此,您必须设置multiDexEnabled true并将扩展的Application类替换为MultiDexApplication。
multiDexEnabled true
Application
MultiDexApplication
它会被解决的。
2nc8po8w10#
我试图使用Process类从C#代码运行.jar。Java代码从eclipse成功运行,但不能从C#Visual Studio运行,甚至直接点击JAR文件,它总是停止并出现ClassNotFoundException:异常。我的解决方案是将Java程序导出为“Runnable JAR文件”而不是“JAR文件”。希望它能帮助一些人。
Process
ClassNotFoundException:
vtwuwzda11#
值得注意的是,Java有时会谎报导致问题的类。
如果Java试图加载依赖于类B的类A,而无法加载类B,则可能会出现此错误。
在某些情况下,当问题是B时,Java报告无法加载A类。
根据我的记忆,上一次发生这种情况是在A类包括静态字段或加载B类的静态初始值设定项时。
因此,在检查了类路径是否正确之后(实际上我在启动时转储了完整的类路径),然后我对类A执行了二进制裁剪。
我的意思是,我删除了A中一半的代码。
如果它仍然失败,我就再取下一半,依此类推,直到问题消失(希望问题消失)。
y4ekin9u12#
我刚刚就这么做了
1.使缓存无效并重新启动
2.重建我的项目,解决了问题
qni6mghb13#
如果您正在使用maven,请尝试maven更新所有项目并强制执行快照。它还将清理并重建所有类路径。它解决了我的问题..
9rnv2umw14#
1.如果您的类路径不正确,可能会发生这种情况1.让我们假设一个可序列化的类和一个可反序列化的类位于同一项目名下。运行Serializable类,在特定文件夹中创建一个可序列化对象。现在,您需要非本土化的数据。同时,如果您更改项目的名称,它将不起作用。您必须首先运行可序列化类,然后反序列化文件。
okxuctiv15#
类路径是要从中加载类的位置的列表。
这些“位置”可以是目录,也可以是JAR文件。
对于目录,JVM将遵循加载类的预期模式。如果我的类路径中有目录C:/myproject/CLASS,并且我尝试加载一个类com.mypanany.Foo,它将在CLASS目录下查找名为com的目录,然后在该目录下查找名为myCompany的文件,最后在该目录中查找名为Foo.class的文件。
在第二个示例中,对于JAR文件,它将在JAR文件中搜索该类。JAR文件实际上只是一个压缩的目录集合,如上面所示。如果解压缩一个JAR文件,您将获得一组遵循上述模式的目录和类文件。
因此,当JVM尝试加载类定义时,它从头到尾都要遍历类路径来查找类的定义。例如,在类路径中:
C:/myproject/classes;C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar
JVM将尝试首先在CLASS目录中查找,然后在Stuff.jar中查找,最后在therStuff.jar中查找。
当您获得ClassNotFoundException时,这意味着JVM已经遍历了整个类路径,没有找到您试图引用的类。解决方案就是检查您的类路径,这在Java世界中非常常见。
您可以在命令行上定义类路径,方法是先说java-cp,然后再说您的类路径。在像Eclipse这样的IDE中,您将有一个菜单选项来指定您的类路径。
27条答案
按热度按时间hs1rzwqc1#
我也遇到了这种情况,并尝试了所有其他解决方案。我的HTML文件夹中没有.class文件,我只有.Java文件。一旦我添加了.class文件,程序就可以正常运行。
vlurs2pr2#
将所有代码放在TRY块中,然后在CATCH块中捕获异常
lbsnaicq3#
对不起,这个问题我来晚了,但我会用最简单的外行语言给你解释。当你输入‘javac<Programname.java>时,编译器检查程序并发现错误,首先确保你的程序与你在命令提示符下执行的目录相同。然后它为你的程序创建一个.class文件。例如,如果我的程序的名称是Test.java,那么创建的类文件应该是Test.class,它将在下一行执行。有时Java会为你的.class取一个其他的名称,使用这个名称,你就会得到输出。
pbpqsu0x4#
我删除了一些未使用的导入,它为我解决了这个问题。如果你一开始就不去找一个类,你就不可能找不到它。
9wbgstp75#
我在终端运行Java代码,添加类路径的解决方案如下:
> java -cp <JAR file> <JAVA Class file>
例如,
c:\code\prototype-app\target\classes>java -cp ..\prototype-app-1.0-SNAPSHOT.jar com_stree.app.DetectLabels
我的运行时环境:
Windows OS:Windows 10
6fe3ivhb6#
如果你已经把你的项目移到了新机器上或者从git导入了它,那么试试这个。
1.右键单击类>运行方式>运行配置
1.移除主类引用
1.应用>关闭
1.现在再次右键单击类>作为Java应用程序运行。
这对我很管用。
pobjuy327#
在将“Java Language Support”插件从版本0.66.0升级到0.67.0之后,我开始遇到这个问题。
降级使我可以毫无问题地运行相同的代码。
l3zydbqr8#
在我的例子中,作为类未找到异常抛出的类具有与SSL证书相关的属性。关闭eclipse并以“以管理员身份运行”打开,问题就解决了。由于eclipse已经发布了相关许可,它将抛出此类异常。
k5ifujac9#
如果您添加了多个**(第三方)库并扩展了应用程序**类
那么它就有可能发生。
为此,您必须设置
multiDexEnabled true
并将扩展的Application
类替换为MultiDexApplication
。它会被解决的。
2nc8po8w10#
我试图使用
Process
类从C#代码运行.jar。Java代码从eclipse成功运行,但不能从C#Visual Studio运行,甚至直接点击JAR文件,它总是停止并出现ClassNotFoundException:
异常。我的解决方案是将Java程序导出为“Runnable JAR文件”而不是“JAR文件”。希望它能帮助一些人。vtwuwzda11#
值得注意的是,Java有时会谎报导致问题的类。
如果Java试图加载依赖于类B的类A,而无法加载类B,则可能会出现此错误。
在某些情况下,当问题是B时,Java报告无法加载A类。
根据我的记忆,上一次发生这种情况是在A类包括静态字段或加载B类的静态初始值设定项时。
因此,在检查了类路径是否正确之后(实际上我在启动时转储了完整的类路径),然后我对类A执行了二进制裁剪。
我的意思是,我删除了A中一半的代码。
如果它仍然失败,我就再取下一半,依此类推,直到问题消失(希望问题消失)。
y4ekin9u12#
我刚刚就这么做了
1.使缓存无效并重新启动
2.重建我的项目,解决了问题
qni6mghb13#
如果您正在使用maven,请尝试maven更新所有项目并强制执行快照。它还将清理并重建所有类路径。它解决了我的问题..
9rnv2umw14#
1.如果您的类路径不正确,可能会发生这种情况
1.让我们假设一个可序列化的类和一个可反序列化的类位于同一项目名下。运行Serializable类,在特定文件夹中创建一个可序列化对象。现在,您需要非本土化的数据。同时,如果您更改项目的名称,它将不起作用。您必须首先运行可序列化类,然后反序列化文件。
okxuctiv15#
类路径是要从中加载类的位置的列表。
这些“位置”可以是目录,也可以是JAR文件。
对于目录,JVM将遵循加载类的预期模式。如果我的类路径中有目录C:/myproject/CLASS,并且我尝试加载一个类com.mypanany.Foo,它将在CLASS目录下查找名为com的目录,然后在该目录下查找名为myCompany的文件,最后在该目录中查找名为Foo.class的文件。
在第二个示例中,对于JAR文件,它将在JAR文件中搜索该类。JAR文件实际上只是一个压缩的目录集合,如上面所示。如果解压缩一个JAR文件,您将获得一组遵循上述模式的目录和类文件。
因此,当JVM尝试加载类定义时,它从头到尾都要遍历类路径来查找类的定义。例如,在类路径中:
C:/myproject/classes;C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar
JVM将尝试首先在CLASS目录中查找,然后在Stuff.jar中查找,最后在therStuff.jar中查找。
当您获得ClassNotFoundException时,这意味着JVM已经遍历了整个类路径,没有找到您试图引用的类。解决方案就是检查您的类路径,这在Java世界中非常常见。
您可以在命令行上定义类路径,方法是先说java-cp,然后再说您的类路径。在像Eclipse这样的IDE中,您将有一个菜单选项来指定您的类路径。