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

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


当前回答

另一个让我挠头的场景是:

package com.me
Public class Awesome extends AwesomeLibObject {
    ....
    public static void main(String[] argv) {
         System.out.println("YESS0");
    }
}

其中AwesomeLibObject是在外部库中定义的类。我收到了同样令人困惑的错误消息:

错误:无法找到或加载主类com。太棒了

解决方法很简单:外部库也必须位于类路径中!

其他回答

解决我的问题的方法是:

右键单击要运行的项目/类,然后单击“运行方式”→ 运行配置。然后,您应该按照以下方式修复现有配置或添加新配置:

打开Classpath选项卡,单击Advanced。。。按钮,然后添加项目的bin文件夹。

尝试-Xdiag。

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

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

我在IntelliJ中创建的演示程序遇到了这个问题。

解决这个问题有两个关键点:

程序的包名终端/cmd提示符的当前工作目录

我的演示程序:

package io.rlx.tij.c2;

public class Ex10 {
    public static void main(String[] args) {
        // do something
    }
}

源代码路径:

../projectRoot/src/main/java/io/rlx/tij/c2/Ex10.java

转到java目录:cd/项目根/src/main/java编译到类:javac/io/rlx/tij/c2/Ex10.java运行程序:java io.rlx.tij.c2.Ex10

如果我在..中运行程序/projectRoot/src/main/java/io/rlx/tij/c2或我在没有包名的情况下运行它,我将收到以下错误:错误:无法找到或加载主类。

这就是我解决问题的方法。

我注意到,如果在编译中包含jar文件,那么将当前目录(./)添加到类路径中会有帮助。

javac -cp "abc.jar;efg.jar" MyClass.java
java -cp "abc.jar;efg.jar" MyClass

vs.

javac -cp "**./**;abc.jar;efg.jar" MyClass.java<br>
java -cp "**./**;abc.jar;efg.jar" MyClass

使用此命令:

java -cp . [PACKAGE.]CLASSNAME

示例:如果类名是从Hello.java创建的Hello.class,则使用以下命令:

java -cp . Hello

如果文件Hello.java位于com.demo包中,请使用以下命令

java -cp . com.demo.Hello

在JDK8中,类文件多次出现在同一文件夹中,但java命令需要类路径,因此我们添加了-cp。将当前文件夹作为类路径的参考。