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

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


当前回答

如果类在包中,则必须cd到项目的根目录,并使用类的完全限定名称(packageName.MainClassName)运行。

例子:

我的课程在这里:

D:\project\com\cse\

我的主类的完全限定名称是:

com.cse.Main

所以我回到根项目目录:

D:\project

然后发出java命令:

java com.cse.Main

这个答案是为了帮助新手Java程序员摆脱一个常见错误带来的挫折。我建议您阅读公认的答案,以获得有关Java类路径的更深入的知识。

其他回答

在本例中,您有:

无法找到或加载主类?类路径

这是因为您使用的是“-classpath”,但破折号与java在命令提示符上使用的破折号不同。我遇到了从记事本复制和粘贴到cmd的问题。

根据错误消息(“找不到或加载主类”),有两类问题:

找不到Main类无法加载Main类(在接受的答案中未充分讨论此情况)

当完全限定类名中存在拼写错误或语法错误,或者提供的类路径中不存在Main类时,找不到Main类。

当无法启动类时,无法加载Main类。通常,主类扩展另一个类,而该类不存在于提供的类路径中。

例如:

public class YourMain extends org.apache.camel.spring.Main

如果不包括骆驼弹簧,将报告此错误。

这是另一个花费了我一点时间的问题:命令行类路径参数的行为与您预期的不同。我在MacOS上直接调用CLI,并且在调用中包含两个jar。

例如,这两个都让工具混淆了主类的名称:

这是因为星号导致它错误地解析参数:

java-cp路径/to/jars/*com.mypackage.Main

这是因为我不知道为什么:

java-cp“*.jar”com.mypackage.Main

这是有效的:

java-cp“path/to/jars/*”com.mypackage.Main

显式列出两个jar也有效:

java-cp路径/to/jars/jar1.jar:路径/to/jar/jar2.jar com.mypackage.Main

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

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

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

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

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

[Java版本:11]

如果您使用的是Java11,则不需要编译和运行Java文件。

就像跑步一样

Java类名.Java

例子:

class abc{ 
    public static void main(String[] args){
        System.out.println("hello Jarvis ");    
    }
}

现在运行命令

java abc.java