如何获取java.lang.NoSuchMethodError

MockerTim:

介绍:

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

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

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

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

java MyClass

出现异常:

Exception in thread "main" java.lang.NoSuchMethodError: main

但是这个例子太简单了。

问题:

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

  1. 由两个,最多三个类组成(如果您可以显示需要更多类,那么欢迎您);
  2. 包含正确定义的main方法 ;
  3. 使用该main方法运行该类会导致java.lang.NoSuchMethodError异常
博zh:

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

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章