Java 如何解决ClassNotFoundException?
我正在尝试运行Java应用程序,但出现以下错误:Java 如何解决ClassNotFoundException?,java,class,classpath,classnotfoundexception,Java,Class,Classpath,Classnotfoundexception,我正在尝试运行Java应用程序,但出现以下错误: java.lang.ClassNotFoundException: 冒号之后是缺少的类的位置。但是,我知道该位置不存在,因为该类位于其他位置。如何更新该类的路径?它与类路径有关吗?如果您知道类的路径或包含类的jar,则在运行它时将其添加到类路径中。您可以使用此处提到的类路径: 在窗户上 java -classpath .;yourjar.jar YourMainClass 在UNIX/Linux上 java -classpath .:yourj
java.lang.ClassNotFoundException:
冒号之后是缺少的类的位置。但是,我知道该位置不存在,因为该类位于其他位置。如何更新该类的路径?它与类路径有关吗?如果您知道类的路径或包含类的jar,则在运行它时将其添加到类路径中。您可以使用此处提到的类路径: 在窗户上
java -classpath .;yourjar.jar YourMainClass
在UNIX/Linux上
java -classpath .:yourjar.jar YourMainClass
您的类路径被破坏(这是Java世界中非常常见的问题)
根据启动应用程序的方式,需要将参数修改为
-cp
、MANIFEST.MF中的类路径条目或磁盘布局。转到顶部,删除导入语句(如果有),然后重新导入类。但如果不是这样的话,那么就做一个干净的构建。您使用的是Netbeans还是Eclipse?要通过命令行将类的位置添加到类路径中,只需在运行类时添加-cp
或-classpath
和类的位置即可。即
java -cp "c:/location/of/file" YourProgram
或者,如果您正在运行eclipse之类的IDE,您可以右键单击项目->构建路径->配置构建路径
并将包含类的外部JAR添加到构建路径中,那么它应该可以正常工作。类路径是从中加载类的位置列表 这些“位置”可以是目录,也可以是jar文件 对于目录,JVM将遵循加载类的预期模式。如果我的类路径中有目录C:/myproject/classes,并且我尝试加载一个类com.mycompany.Foo,它将在classes目录下查找名为com的目录,然后在该目录下查找名为mycompany的目录,最后,它将在该目录中查找名为Foo.class的文件 在第二个实例中,对于jar文件,它将在jar文件中搜索该类。jar文件实际上只是一个压缩的目录集合,如上所述。如果您解压缩一个jar文件,您将得到一堆遵循上述模式的目录和类文件 因此,当JVM尝试加载类定义时,它会从头到尾遍历类路径以查找类的定义。例如,在类路径中: C:/myproject/classes;C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar JVM将首先尝试查找目录classes,然后查找stuff.jar,最后查找otherstuff.jar 当您得到ClassNotFoundException时,这意味着JVM已经遍历了整个类路径,没有找到您试图引用的类。正如Java世界中经常出现的那样,解决方案是检查类路径
您可以在命令行上定义一个类路径,方法是说java-cp,然后是您的类路径。在Eclipse这样的IDE中,您将有一个菜单选项来指定类路径。我也遇到了这个问题,并尝试了所有其他解决方案。我的HTML文件夹中没有.class文件,只有.java文件。一旦我添加了.class文件,程序就运行得很好
使用“;”作为分离器。如果环境变量设置正确,则应查看设置。如果路径和类路径正确,windows应该识别这些命令。安装Java时无需重新启动计算机。将所有代码放入try块,然后将catch exception放入catch块
try
{
// code
}
catch(ClassNotFoundException e1)
{
e1.getmessage();
}
如果你使用maven,试试这些。我在我的项目中使用maven,当我执行
mvn clean install
并尝试运行程序时,它会抛出异常。所以,我清理了这个项目并再次运行它,它对我有效
我使用EclipseIDE
对于运行Junit测试时未发现类异常,请尝试运行一次mvn clean测试。它将编译所有的测试类。这是我到目前为止发现的
假设我们有一个名为org.mypackage
的包,其中包含以下类:
- HelloWorld(主类)
- 支持类
- 实用类
定义此包的文件物理存储在目录D:\myprogram
(在Windows上)或/home/user/myprogram
(在Linux上)下
文件结构如下所示:
调用Java时,我们指定要运行的应用程序的名称:org.mypackage.HelloWorld
。但是,我们还必须告诉Java在哪里查找定义包的文件和目录。因此,要启动程序,我们必须使用以下命令:
注意:无论当前位置如何,都必须执行上述java
命令。但是javac
的情况并非如此。对于
编译您甚至可以直接进入您拥有的目录
您的.java
文件并直接执行javac ClassName.java
将jar文件的完整路径添加到类路径。
在linux中使用:export CLASSPATH=“.:/full/path/to/file.jar:$CLASSPATH”
。另一种工作方式(不编辑类路径)是解压缩当前项目文件夹中的jar
方法对我不起作用:
1) 使用带有jar文件完整路径的-cp
选项
2) 仅对na使用-cp
..\SomePath>javac HelloWorld.java
..\SomePath>java HelloWorld.class
..\SomePath>java HelloWorld
<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>