新的 Java 程序员在尝试运行 Java 程序时经常会遇到如下消息。 (不同的 Java 工具、IDE 等针对此问题提供了多种诊断方法。)
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"
这是什么意思,什么会导致它,应该怎么做才能解决它?
原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您使用
java
命令从命令行运行 Java 应用程序时,例如,该命令加载您指定的类,然后查找名为
main
的入口点方法。更具体地说,它正在寻找一个声明如下的方法:入口点方法的具体要求是:
public
。static
2 。void
。String[]
3 。( 可以 使用
varargs
语法声明该参数;例如String... args
。有关更多信息,请参阅 此问题。String[]
参数用于从命令传递参数行,即使您的应用程序没有命令行参数也是必需的。)如果不满足上述任何一个要求,则
java
命令将失败并显示一些消息变体:或者,如果您运行的是 非常 旧的 Java 版本:
如果您遇到此错误,请检查您是否有
main
方法,并且它是否满足上面列出的所有六个要求。1 - 一个真正晦涩的变体是“main”中的一个或多个字符不是 LATIN-1 字符……而是一个 Unicode 字符,在显示时 看起来像 相应的 LATIN-1 字符。
2 - 这里 解释了为什么该方法需要是静态的。
3 -
String
必须是标准java.lang.String
类,而不是隐藏标准类的名为String
的自定义类。