新的 Java 程序员在尝试运行 Java 程序时经常会遇到类似以下的消息。
Error: Main method not found in class MyClass, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
Error: Main method not found in the file, please define the main method as:
public static void main(String[] args)
Error: Main method is not static in class MyClass, please define the main method as:
public static void main(String[] args)
Error: Main method must return a value of type void in class MyClass, please
define the main method as:
public static void main(String[] args)
java.lang.NoSuchMethodError: main
Exception in thread "main"
这是什么意思,什么可能导致它,以及应该采取什么措施来解决它?
答案
当您使用java
从命令行运行 Java 应用程序的命令,例如,
java some.AppName arg1 arg2 ...
该命令加载您指定的类,然后查找名为的入口点方法main
。
package some;
public class AppName {
...
public static void main(final String[] args) {
// body of main method follows
...
}
}
入口点方法的具体要求是:
- 该方法必须位于指定的类中。
- 方法的名称必须是"main"确切地 那种大写^1^。
- 该方法必须是
public
。 - 该方法必须是
static
^2^。 - 该方法的返回类型必须是
void
。 - 该方法必须只有一个参数,并且参数的类型必须是
String[]
^3^。
(论证可能 被声明使用varargs
句法;String... args
。这个问题了解更多信息。String[]
argument 用于从命令行传递参数,即使您的应用程序不采用命令行参数也是必需的。)
如果上述要求中有任何一项不满足,java
命令将失败并显示消息的某些变体:
Error: Main method not found in class MyClass, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
或者,如果您正在运行极其旧版本的Java:
java.lang.NoSuchMethodError: main
Exception in thread "main"
如果您遇到此错误,请检查您是否有main
方法,并且它满足上面列出的所有六个要求。
^1 - 一个非常模糊的变体是"main"中的一个或多个字符不是 LATIN-1 字符……而是 Unicode 字符好像 显示时对应的 LATIN-1 字符。
2 -这里解释了为什么该方法需要是静态的。
3 -String
必须是标准java.lang.String
类而不是名为的自定义类String
那隐藏了标准类。^