如何获取java.lang.NoSuchMethodError

时间:2011-07-23 06:41:31

标签: java nosuchmethoderror

简介:

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

但这个例子太简单了。

问题:

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

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

2 个答案:

答案 0 :(得分:12)

如果一个类需要另一个类中的方法(并且使用该方法编译),则会发生

NoSuchMethodError,但在运行时,其他类没有该方法。所以你需要:

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

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

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

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

答案 1 :(得分:2)

从一个类中创建一个类文件,该类在其main方法中使用某个Java版本> = 1.6.xxxx调用java.util.Properties.load(Reader)

尝试使用某些Java版本执行此类< 1.6.xxxx

原因:{6}在Java 6中引入。它被调用,但在此版本的Java中不存在。

这同样适用于更新中引入默认语言库的所有方法。