介绍:

SO上有许多问题,如How to fix java.lang.NoSuchMethodError

如我所见,获得此错误的最简单方法是制作一个类

class MyClass {} // no methods at all, for instance

没有正确定义main method
编译并运行:
java MyClass

出现异常:
Exception in thread "main" java.lang.NoSuchMethodError: main

但是这个例子太简单了。

问题:

任何人都可以提供一个简单的代码,
  • 包含两个,最多三个类(如果您可以显示需要更多类,那么欢迎您);
  • 包含正确定义的main method
  • 使用该main method运行类,会导致 java.lang.NoSuchMethodError 引发异常。
  • 最佳答案

    如果一个类在另一个类中期望有一个方法(并已使用该方法进行编译),则会发生 NoSuchMethodError ,但是在运行时另一个类没有该方法。因此,您需要:

  • 创建两个类,其中一个调用另一个
  • 上的方法
  • 编译两个类
  • 然后从第二个类中删除调用的方法,仅编译第二个类

  • 然后,如果您运行第一个类(使用main方法),则尝试在第二个类上调用该方法时该方法将抛出该错误(该方法不再存在)

    这个例子在现实世界中很少发生。这是发生错误的一些实际情况:
  • 您正在使用依赖于另一个jar的第3方库(jar)。但是,您使用的这些jar版本不兼容,第1个尝试在第2个类的类上调用方法
    现在不存在的jar。
  • 您的编译时和运行时类路径不同-您已针对某些库的版本(也可以是JDK本身)编译代码,但是您的运行时具有其他版本
  • 您有一个多模块项目。您的IDE在编译时“链接”项目,因此可以立即看到任何更改。但是,在构建时,您忘记编译其中一个模块(已添加方法的位置),因此在运行时它正在使用旧版本。
  • 08-06 15:59