1

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

 3 years ago
source link: http://javakk.com/1522.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

rUFzeqJ.png!mobile

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

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

public class HelloWorld {

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

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

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开始,我们就收到了这个新错误。好消息是,解决方案完全相同。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK