java - "Error: Main method not found in class MyClass, please define the main method as..."

标签 java runtime-error program-entry-point nosuchmethoderror

新的 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"

这是什么意思,是什么原因造成的,应该怎么做才能修复它?

最佳答案

当您使用 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。参见this question了解更多信息。 String[] 参数用于从命令行传递参数,即使您的应用程序不接受命令行参数也是必需的。)

如果不满足上述任何一个要求,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 - Here解释了为什么要求该方法是静态的。
3 - String 必须是标准 java.lang.String 类,而不是隐藏标准类的名为 String 的自定义类。

关于java - "Error: Main method not found in class MyClass, please define the main method as...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407250/

相关文章:

ios - 断点卡在主函数处

android - React Native Android - 无法找到或加载主类 org.gradle.wrapper.GradleWrapperMain

java - 到底 (args.length>0) 是什么意思?

java - 响应中未显示 Spring Boot 验证错误消息

Jenkins - java.lang.OutOfMemoryError : PermGen space -

php - 为什么这个php数组函数给我一个错误

使用按钮更改 Activity 时出现 Android 运行时错误

java - Java 是否有围绕 subversion 和 Git 的 API 包装器?

java - 如何使用 GWT 2.1 数据表示小部件

java - Concat Publishers 与 Reracor 但处理元素不同