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

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


当前回答

如果是Maven项目:

转到POM文件。删除所有依赖项。保存POM文件。再次只导入必要的依赖项。保存POM文件。

这个问题应该消失。

其他回答

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

这里的所有答案似乎都针对Windows用户。对于Mac,类路径分隔符是:,而不是;。作为一个错误,使用;如果从Windows到Mac,则很难发现。

下面是相应的Mac命令:

java -classpath ".:./lib/*" com.test.MyClass

在本例中,包是com.test,类路径中还包含一个lib文件夹。

使用关键字“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

我在做mvn eclipse后遇到了这个错误:eclipse。这有点搞乱了我的.classpath文件。

我不得不将.classpath中的行从

<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>

to

<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />

尝试-Xdiag。

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

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