如何解析classnotfoundexception?

krcsximq  于 2021-06-30  发布在  Java
关注(0)|答案(22)|浏览(374)

我试图运行java应用程序,但出现以下错误: java.lang.ClassNotFoundException: 冒号后面是缺少的类的位置。但是,我知道该位置不存在,因为类位于其他位置。如何更新该类的路径?它与类路径有关吗?

vi4fp9gy

vi4fp9gy1#

在将“java语言支持”插件从visualstudio代码版本0.66.0升级到0.67.0之后,我开始出现这个问题。
降级回允许我运行相同的代码而没有任何问题。

lxkprmvk

lxkprmvk2#

我也遇到了这个问题,并尝试了所有其他的解决方案。我的html文件夹中没有.class文件,只有.java文件。一旦我添加了.class文件,程序就运行得很好。

tzdcorbm

tzdcorbm3#

基本泛型问题-最简单的泛型答案;)
根据这些信息,我将假设您可能正在尝试一种基本的方法来编码、构建/编译和运行一个简单的控制台应用程序,比如“hello world”,使用一些简单的文本编辑器和一些命令shell。
此错误发生在休止场景中:

..\SomePath>javac HelloWorld.java
..\SomePath>java HelloWorld.class

换句话说,使用:

..\SomePath>java HelloWorld

p、 添加文件扩展名.class会产生相同的错误。还要确保在操作系统的环境变量路径中有java的(jdk/jre)bin文件夹?

qnyhuwrf

qnyhuwrf4#

在我的例子中,作为class not found exception抛出的类具有与ssl证书相关的属性。关闭eclipse并以“以管理员身份运行”的身份打开,然后问题得到解决。由于eclipse拥有与问题相关的权限,它将抛出此类异常。

ozxc1zmp

ozxc1zmp5#

如果您添加了多个(第三方)库并扩展了应用程序类
那就有可能发生。
为此,你必须 multiDexEnabled true 换上你的延长线 Application 与…同班 MultiDexApplication .
会解决的。

xlpyo6sf

xlpyo6sf6#

我刚刚做了
1.使缓存失效并重新启动
2.重建了解决问题的项目

92dk7w1h

92dk7w1h7#

这可能发生在windows上,在java更新之后,旧版本的javasdk丢失,新版本出现。我将检查您的ide是否使用已安装的javasdk版本(intellij:ctrl+shift+alt+s)

6rqinv9w

6rqinv9w8#

我试着用 Process 班级。java代码在eclipse中运行成功,但在c#visualstudio中运行不成功,甚至直接单击jar文件,它总是以 ClassNotFoundException: 例外。我的解决方案是将java程序导出为“runnable jar file”,而不是“jar file”。希望它能帮助别人。

wztqucjr

wztqucjr9#

如果您知道类的路径或包含该类的jar,那么在运行它时将其添加到类路径中。您可以使用这里提到的类路径:
在windows上

java -classpath .;yourjar.jar YourMainClass

在unix/linux上

java -classpath .:yourjar.jar YourMainClass
rdrgkggo

rdrgkggo10#

如果您已将项目移动到新计算机或从git导入它,请尝试以下操作。
右键单击class>runas>runconfiguration
删除主类引用
应用>关闭
现在再次右键单击class>runasjava应用程序。
它对我有用。

fzsnzjdm

fzsnzjdm11#

类路径是从中加载类的位置列表。
这些“位置”可以是目录,也可以是jar文件。
对于目录,jvm将遵循加载类的预期模式。如果我在classpath中有目录c:/myproject/classes,并且我尝试加载一个类com.mycompany.foo,它将在classes目录下查找一个名为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,然后说classpath。在eclipse这样的ide中,您将有一个菜单选项来指定类路径。

mnowg1ta

mnowg1ta12#

如果你用maven,试试这些。我在我的项目中使用maven mvn clean install 试着运行一个抛出异常的程序。所以,我清理项目,再次运行它,它为我工作。
我使用eclipseide。
对于运行junit测试时未发现类异常,请尝试运行 mvn clean test 一次。它将编译所有的测试类。

jckbn6z7

jckbn6z713#

将jar文件的完整路径添加到类路径。在linux中使用: export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH" . 另一种有效的方法(不编辑类路径)是解压缩当前项目文件夹中的jar。
方法对我不起作用:
1) 使用 -cp 带有jar文件完整路径的选项。
2) 使用 -cp 当位于当前文件夹中时,只有jar的名称
3) 将jar复制到当前项目文件夹
4) 将jar复制到javajar的标准位置(/usr/share/java)
这个解决方案是针对mysql connector java.5-*.jar中的com.mysql.jdbc.driver类报告的,它在linux上使用openjdk 1.7版

m4pnthwp

m4pnthwp14#

如果类路径不正确,可能会发生这种情况
让我们假设一个序列化类和反序列化类在同一个projectname下。运行serializable类,在特定文件夹中创建一个serializable对象。现在你需要去序列化的数据。同时,如果你改变了项目的名称,它将不起作用。必须先运行可序列化类,然后反序列化文件。

mrfwxfqh

mrfwxfqh15#

这是迄今为止我找到的最好的解决办法。
假设我们有一个叫 org.mypackage 包含类:
helloworld(主类)
支持类
实用类
定义这个包的文件物理上存储在这个目录下 D:\myprogram (在窗口上)或 /home/user/myprogram (在linux上)。
文件结构如下所示:

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

注意:您必须执行上述操作 java 不管你现在的位置是什么。但事实并非如此 javac . 对于编译,您甚至可以直接进入您的 .java 文件并直接执行 javac ClassName.java .

相关问题