新的 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
        ...
    }
}

入口点方法的具体要求是:

  1. 该方法必须位于指定的类中。
  2. 方法的名称必须是"main"确切地 那种大写^1^。
  3. 该方法必须是public
  4. 该方法必须是static ^2^。
  5. 该方法的返回类型必须是void
  6. 该方法必须只有一个参数,并且参数的类型必须是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那隐藏了标准类。^

来自: stackoverflow.com