我试图运行java应用程序,但出现以下错误: java.lang.ClassNotFoundException: 冒号后面是缺少的类的位置。但是,我知道该位置不存在,因为类位于其他位置。如何更新该类的路径?它与类路径有关吗?
java.lang.ClassNotFoundException:
rks48beu1#
你的类路径被破坏了(这是java世界中一个非常常见的问题)。根据应用程序的启动方式,您需要将参数修改为 -cp ,manifest.mf中的类路径条目或磁盘布局。
-cp
wpx232ag2#
这是迄今为止我找到的最好的解决办法。假设我们有一个叫 org.mypackage 包含类:helloworld(主类)支持类实用类定义这个包的文件物理上存储在这个目录下 D:\myprogram (在窗口上)或 /home/user/myprogram (在linux上)。文件结构如下所示:调用java时,我们指定要运行的应用程序的名称: org.mypackage.HelloWorld . 但是,我们还必须告诉java在哪里查找定义包的文件和目录。所以要启动程序,我们必须使用以下命令:注意:您必须执行上述操作 java 不管你现在的位置是什么。但事实并非如此 javac . 对于编译,您甚至可以直接进入您的 .java 文件并直接执行 javac ClassName.java .
org.mypackage
D:\myprogram
/home/user/myprogram
org.mypackage.HelloWorld
java
javac
.java
javac ClassName.java
ubof19bj3#
转到顶部并删除import语句(如果有),然后重新导入类。但如果不是这样的话,那就做一个干净的建筑。您使用的是netbeans还是eclipse?
laawzig24#
使用“;”作为分隔符。如果您的环境变量设置正确,您应该看到您的设置。如果您的路径和类路径是正确的,windows应该识别这些命令。安装java时不需要重新启动计算机。
inn6fuwd5#
将所有代码放在try块中,然后将catch异常放在catch块中
try { // code } catch(ClassNotFoundException e1) { e1.getmessage(); }
uwopmtnx6#
如果您使用的是maven,请尝试maven更新所有项目并强制快照。它也会清理并重建所有类路径。。它解决了我的问题。。
6ojccjat7#
如果您知道类的路径或包含该类的jar,那么在运行它时将其添加到类路径中。您可以使用这里提到的类路径:在windows上
java -classpath .;yourjar.jar YourMainClass
在unix/linux上
java -classpath .:yourjar.jar YourMainClass
a6b3iqyw8#
这可能发生在windows上,在java更新之后,旧版本的javasdk丢失,新版本出现。我将检查您的ide是否使用已安装的javasdk版本(intellij:ctrl+shift+alt+s)
cmssoen29#
要通过命令行将类的位置添加到类路径,只需添加 -cp 或者 -classpath 以及运行它时类的位置。即
-classpath
java -cp "c:/location/of/file" YourProgram
或者,如果您运行的是eclipse之类的ide,您可以右键单击 project -> build path -> configure build path 并将包含您的类的外部jar添加到构建路径中,那么它应该可以正常工作。
project -> build path -> configure build path
3qpi33ja10#
如果您使用maven,请检查您的应用程序中是否有此插件 pom.xml :
pom.xml
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.0</version> <executions> <!-- Attach the shade goal into the package phase --> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
它将把依赖关系(异常原因)放到jar中。仅供参考:这将包括在最终jar中膨胀的所有依赖项
gblwokeq11#
类路径是从中加载类的位置列表。这些“位置”可以是目录,也可以是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.jarjvm将首先尝试查找目录类,然后是stuff.jar,最后是otherstuff.jar。当您得到classnotfoundexception时,这意味着jvm已经遍历了整个类路径,而没有找到您试图引用的类。解决方案,就像java世界中经常出现的那样,是检查类路径。在命令行上定义一个类路径,方法是说java-cp,然后说classpath。在eclipse这样的ide中,您将有一个菜单选项来指定类路径。
ugmeyewa12#
如果类路径不正确,可能会发生这种情况让我们假设一个序列化类和反序列化类在同一个projectname下。运行serializable类,在特定文件夹中创建一个serializable对象。现在你需要去序列化的数据。同时,如果你改变了项目的名称,它将不起作用。必须先运行可序列化类,然后反序列化文件。
2hh7jdfx13#
在将“java语言支持”插件从visualstudio代码版本0.66.0升级到0.67.0之后,我开始出现这个问题。降级回允许我运行相同的代码而没有任何问题。
vsnjm48y14#
基本泛型问题-最简单的泛型答案;)根据这些信息,我将假设您可能正在尝试一种基本的方法来编码、构建/编译和运行一个简单的控制台应用程序,比如“hello world”,使用一些简单的文本编辑器和一些命令shell。此错误发生在休止场景中:
..\SomePath>javac HelloWorld.java ..\SomePath>java HelloWorld.class
换句话说,使用:
..\SomePath>java HelloWorld
p、 添加文件扩展名.class会产生相同的错误。还要确保在操作系统的环境变量路径中有java的(jdk/jre)bin文件夹?
f8rj6qna15#
在我的例子中,作为class not found exception抛出的类具有与ssl证书相关的属性。关闭eclipse并以“以管理员身份运行”的身份打开,然后问题得到解决。由于eclipse拥有与问题相关的权限,它将抛出此类异常。
22条答案
按热度按时间rks48beu1#
你的类路径被破坏了(这是java世界中一个非常常见的问题)。
根据应用程序的启动方式,您需要将参数修改为
-cp
,manifest.mf中的类路径条目或磁盘布局。wpx232ag2#
这是迄今为止我找到的最好的解决办法。
假设我们有一个叫
org.mypackage
包含类:helloworld(主类)
支持类
实用类
定义这个包的文件物理上存储在这个目录下
D:\myprogram
(在窗口上)或/home/user/myprogram
(在linux上)。文件结构如下所示:
调用java时,我们指定要运行的应用程序的名称:
org.mypackage.HelloWorld
. 但是,我们还必须告诉java在哪里查找定义包的文件和目录。所以要启动程序,我们必须使用以下命令:注意:您必须执行上述操作
java
不管你现在的位置是什么。但事实并非如此javac
. 对于编译,您甚至可以直接进入您的.java
文件并直接执行javac ClassName.java
.ubof19bj3#
转到顶部并删除import语句(如果有),然后重新导入类。但如果不是这样的话,那就做一个干净的建筑。您使用的是netbeans还是eclipse?
laawzig24#
使用“;”作为分隔符。如果您的环境变量设置正确,您应该看到您的设置。如果您的路径和类路径是正确的,windows应该识别这些命令。安装java时不需要重新启动计算机。
inn6fuwd5#
将所有代码放在try块中,然后将catch异常放在catch块中
uwopmtnx6#
如果您使用的是maven,请尝试maven更新所有项目并强制快照。它也会清理并重建所有类路径。。它解决了我的问题。。
6ojccjat7#
如果您知道类的路径或包含该类的jar,那么在运行它时将其添加到类路径中。您可以使用这里提到的类路径:
在windows上
在unix/linux上
a6b3iqyw8#
这可能发生在windows上,在java更新之后,旧版本的javasdk丢失,新版本出现。我将检查您的ide是否使用已安装的javasdk版本(intellij:ctrl+shift+alt+s)
cmssoen29#
要通过命令行将类的位置添加到类路径,只需添加
-cp
或者-classpath
以及运行它时类的位置。即或者,如果您运行的是eclipse之类的ide,您可以右键单击
project -> build path -> configure build path
并将包含您的类的外部jar添加到构建路径中,那么它应该可以正常工作。3qpi33ja10#
如果您使用maven,请检查您的应用程序中是否有此插件
pom.xml
:它将把依赖关系(异常原因)放到jar中。
仅供参考:这将包括在最终jar中膨胀的所有依赖项
gblwokeq11#
类路径是从中加载类的位置列表。
这些“位置”可以是目录,也可以是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中,您将有一个菜单选项来指定类路径。
ugmeyewa12#
如果类路径不正确,可能会发生这种情况
让我们假设一个序列化类和反序列化类在同一个projectname下。运行serializable类,在特定文件夹中创建一个serializable对象。现在你需要去序列化的数据。同时,如果你改变了项目的名称,它将不起作用。必须先运行可序列化类,然后反序列化文件。
2hh7jdfx13#
在将“java语言支持”插件从visualstudio代码版本0.66.0升级到0.67.0之后,我开始出现这个问题。
降级回允许我运行相同的代码而没有任何问题。
vsnjm48y14#
基本泛型问题-最简单的泛型答案;)
根据这些信息,我将假设您可能正在尝试一种基本的方法来编码、构建/编译和运行一个简单的控制台应用程序,比如“hello world”,使用一些简单的文本编辑器和一些命令shell。
此错误发生在休止场景中:
换句话说,使用:
p、 添加文件扩展名.class会产生相同的错误。还要确保在操作系统的环境变量路径中有java的(jdk/jre)bin文件夹?
f8rj6qna15#
在我的例子中,作为class not found exception抛出的类具有与ssl证书相关的属性。关闭eclipse并以“以管理员身份运行”的身份打开,然后问题得到解决。由于eclipse拥有与问题相关的权限,它将抛出此类异常。