4年前 (2021-02-13)  Java系列 |   抢沙发  6598 
文章评分 1 次,平均分 5.0

今天我们将探讨java的一个常见问题,即如何修复java中的“error:couldnotfind or load main class”错误。顾名思义,当java找不到您要执行的类时,就会发生这个错误。为了更好地理解错误,您应该熟悉类路径CLASSPATH。如果你不熟悉类路径,那么请检查一下什么是类路径以及它与路径的区别。

另请阅读:PATH和CLASSPATH之间的区别

如果java查找所有类文件的CLASSPATH环境变量未找到类,则会出现“找不到或无法加载主类:XXX”,其中类名为XXX。

找不到或无法加载主类什么意思?

如何修复错误:找不到或无法加载主类

 

1. 从java命令调用.class文件

public class HelloWorld {

    public static void main(String args[]) {
        System.out.println(" You have just run HelloWorld !");       
    }
}

假设我有一个简单的HelloWorldJava程序。如果我用命令编译它

javac HelloWorld.java

那么HelloWorld.class类文件已创建。

如果尝试使用java命令运行.class文件,则会出现以下错误:找不到或无法加载主类,如下所示:

java HelloWorld.class

你应该试试:

java HelloWorld

耶!!你的问题解决了。

You have just run HelloWorld !

2. 如果你的casing不正确

编译代码后,运行以下命令

java helloworld

然后出现“找不到或加载主类helloworld”错误。确保套管正确。在我们的程序中,它应该是HelloWorld(其中hello的'H'和world的'W'是大写的)。

java HelloWorld

耶!它可以很好的打印出来

You have just run HelloWorld !

3. 在包中初始化

在下面的示例中,有个HelloWorld类在com.javahunger包。

package com.javahungry;
/**
 * Java program to demonstrate 
 * Error :Could not find or load main class
 * 
 * @author Subham Mittal
 */
public class HelloWorld {

    public static void main(String args[]) {
        System.out.println(" You have just run HelloWorld !");       
    }
}

如果你试着去调用:

java HelloWorld

它将导致错误:无法找到或加载主类HelloWorld。发生此错误是因为必须使用其完全限定名调用它。很明显,这个类的名称不是HelloWorld,而是com.javahungry.HelloWorld. 尝试执行HelloWorld无效,因为不存在具有该名称的类。反正不在当前类路径上。

java  com.javahungry.HelloWorld

上述命令还将导致错误:无法找到或加载主类HelloWorld,因为未设置CLASSPATH环境变量。我不使用-classpath-cp命令来指定路径。默认情况下,java在默认目录中搜索类文件。

java -cp . com.javahungry.HelloWorld

如果classpath类路径正确,那么上面的命令将运行HelloWorld程序。否则,还会导致错误:无法找到或加载主类HelloWorld,因为-cp .命令确保JVM在当前目录中查找类文件。

如果错误仍然存在,请执行以下步骤。

必须确保.class文件的位置已添加到类路径中。假设“/Users/SubhamMittal/Desktop/”在类路径classpath上,JVM查找名为com.javahungry.HelloWorld,它将在以下路径中查找.class文件:

/Users/SubhamMittal/Desktop/com/javahungry/HelloWorld

java -cp  /Users/SubhamMittal/Desktop/  com.javahungry.HelloWorld

耶!它会打印出来

 You have just run HelloWorld !

上面的例子是在macos上执行的。

4. 在Windows操作系统的包中初始化

假设编译后的java类即HelloWorld(如上所示)位于下面的路径中

D:\project\com\javahungry\

HelloWorld类的全名是

com.javahungry.HelloWorld

所以用cd .. 返回命令以到达主目录

D:\project

然后发出java命令

java com.javahungry.HelloWorld

耶!程序在没有设置任何类路径的情况下成功运行。这是因为java正在寻找由.(dot)表示的当前目录,并且能够找到.\com\javahunger\HelloWorld.class类.

它会打印出来

You have just run HelloWorld !

5. 将CLASSPATH设置为当前目录

如果.class文件在当前文件夹中,则设置 . 到类路径CLASSPATH(注意,在Windows中,类路径分隔符是分号而在Linux中,分隔符是冒号)。

您可以在Windows中设置类路径:

set CLASSPATH = %CLASSPATH%;.

(注 . 最后为当前目录添加)

您可以在Linux中设置类路径:

export CLASSPATH = ${CLASSPATH}:.

(注.最后为当前目录添加)

如果您使用的是java 1.5或1.6,则不会出现错误:找不到或无法加载主类,而会在线程“main”中出现异常java.lang.NoClassDefFoundError : HelloWorld。从JDK1.7开始,我们就收到了这个新错误。好消息是,解决方案完全相同。

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1522.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册