新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
新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