如何获取java.lang.NoSuchMethodError

Moc*_*Tim 4 java nosuchmethoderror

介绍:

关于如何在SO 上修复java.lang.NoSuchMethodError有很多问题.

正如我所看到的,获得此错误的最简单方法是创建一个类

class MyClass {} // no methods at all, for instance
Run Code Online (Sandbox Code Playgroud)

没有正确定义的main方法,编译并运行:

java MyClass
Run Code Online (Sandbox Code Playgroud)

出现例外情况:

Exception in thread "main" java.lang.NoSuchMethodError: main
Run Code Online (Sandbox Code Playgroud)

但这个例子太简单了.

问题:

任何人都可以提供一个简单的代码

  1. 由两个,最多三个类组成(如果你可以证明需要更多的课程 - 那么你是受欢迎的);
  2. 包含正确定义的主要方法 ;
  3. 使用该main方法运行类会导致java.lang.NoSuchMethodError异常.

Boz*_*zho 12

NoSuchMethodError如果一个类需要另一个类中的方法(并且使用该方法编译),则会发生这种情况,但在运行时,其他类没有该方法.所以你需要:

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

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

这个例子很少在现实世界中发生.以下是发生错误时的一些实际情况:

  • 您正在使用依赖于另一个jar的第三方库(jar).但是你有这些jar的不兼容版本,并且第一个尝试在第二个jar中的类上调用一个方法,该方法不再存在/尚​​未存在.
  • 您的编译时和运行时类路径不同 - 您已经针对某个库的版本(也可以是JDK本身)编译了代码,但您的运行时具有其他版本
  • 你有一个多模块项目.您的IDE在编译时"链接"项目,因此可以立即看到任何更改.但是当你构建时忘记编译其中一个模块(你已经添加了一个方法),所以在运行时它使用的是旧版本.