新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。

这意味着什么,是什么导致的,你应该如何解决?


当前回答

尝试-Xdiag。

Steve C的回答很好地涵盖了可能的情况,但有时确定类是否无法找到或加载可能不是那么容易。使用java-Xdiag(自JDK7以来)。这将打印出一个漂亮的堆栈跟踪,它提供了消息“找不到或加载主类消息”的含义的提示。

例如,它可以将您指向主类使用的其他类,这些类无法找到并阻止加载主类。

其他回答

如果源代码名为HelloWorld.java,则编译代码将为HelloWorld.class。

如果使用以下方法调用它,则会出现该错误:

java HelloWorld.class

相反,请使用以下方法:

java HelloWorld

使用关键字“package”

如果源代码中有package关键字(主类在包中定义),则应使用类的全名(packageName.MainClassName)在分层目录中运行它。

假设有一个源代码文件(Main.java):

package com.test;

public class Main {

    public static void main(String[] args) {
        System.out.println("salam 2nya\n");
    }
}

要运行此代码,应将Main.Class放在类似于包的目录中:

C: \Users\workspace\testapp.com\test\Main.Java

然后将终端的当前目录更改为项目的根目录:

cd C:\Users\workspace\testapp

最后,运行代码:

java com.test.Main

没有关键字“package”

如果您的源代码名称中没有任何包,那么可能是您使用了错误的命令。假设您的Java文件名为Main.Java,编译后:

javac Main.java

编译后的代码将是Main.class

如果使用以下方法调用它,则会出现该错误:

java Main.class

相反,请使用以下方法:

java Main

我遇到了同样的问题,最终发现了我的错误:)我使用此命令进行编译,并且运行正常:

javac -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode.java

但这个命令对我不起作用(我找不到或加载主类qrcode):

java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode

最后,我只在类路径末尾添加了“:”字符,问题就解决了:

java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar:" qrcode

有时,在您可能尝试过的一些在线编译器中,如果不编写公共类[Classname],而只编写类[Classname],则会出现此错误。

有时,可能导致问题的原因与主课无关,我必须通过艰难的方式找到答案。这是我移动的参考库,它给了我:

无法找到或加载主类xxx Linux

我只是删除了那个引用,再次添加,它再次运行良好。