新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
当前回答
这是一个具体的案例:
Windows(通过Windows7测试)不接受类和包名称中的特殊字符(如á)。不过,Linux确实如此。
我在NetBeans中构建.jar并尝试在命令行中运行时发现了这一点。它在NetBeans中运行,但不在命令行上运行。
其他回答
如果源代码名为HelloWorld.java,则编译代码将为HelloWorld.class。
如果使用以下方法调用它,则会出现该错误:
java HelloWorld.class
相反,请使用以下方法:
java HelloWorld
在Windows PowerShell中使用-cp选项运行java时,可能会出现如下错误:
The term `ClassName` is not recognized as the name of a cmdlet, function, script ...
为了让PowerShell接受命令,-cp选项的参数必须包含在引号中,如下所示:
java -cp 'someDependency.jar;.' ClassName
以这种方式形成命令应该允许Java正确处理类路径参数。
使用关键字“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
在IntellijIDE中,选择run/debug>>编辑配置,然后为构建和运行菜单选择适当的JDK。
根据错误消息(“找不到或加载主类”),有两类问题:
找不到Main类无法加载Main类(在接受的答案中未充分讨论此情况)
当完全限定类名中存在拼写错误或语法错误,或者提供的类路径中不存在Main类时,找不到Main类。
当无法启动类时,无法加载Main类。通常,主类扩展另一个类,而该类不存在于提供的类路径中。
例如:
public class YourMain extends org.apache.camel.spring.Main
如果不包括骆驼弹簧,将报告此错误。