Java 如何解决ClassNotFoundException?

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应用程序,但出现以下错误:

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文件,程序就运行得很好

  • 如果类路径不正确,可能会发生这种情况

  • 让我们将一个可序列化类和反序列化类放在同一个projectname下。运行serializable类,在特定文件夹中创建一个serializable对象。现在您需要去序列化的数据。同时,如果您更改项目名称,它将不起作用。您必须首先运行可序列化类,然后反序列化文件


  • 使用“;”作为分离器。如果环境变量设置正确,则应查看设置。如果路径和类路径正确,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>