我得到一个NoSuchMethodError错误时运行我的Java程序。出了什么问题,我该怎么解决?


当前回答

为了我的案子。我必须检查其他参考方法。我需要将各处的方法签名更改为与新更新的方法签名相同。

例如,将特定方法的返回类型从集合更改为数组列表。

其他回答

我也遇到过同样的问题。当类中存在模糊性时,也会出现这种情况。我的程序试图调用一个方法,该方法存在于两个JAR文件中,位于相同的位置/类路径。删除一个JAR文件或只使用一个JAR文件来执行代码。检查您使用的不是相同的JAR,也不是包含相同类的同一个JAR的不同版本。

DISP_E_EXCEPTION [step] [] [Z-JAVA-105 Java异常Java .lang. nosuchmethoderror (com.example.yourmethod)]

来回答最初的问题。根据java文档:

"NoSuchMethodError"当应用程序试图调用类(静态或实例)的指定方法,而该类不再有该方法的定义时抛出。

通常,这个错误会被编译器捕获;只有当类的定义发生不兼容的更改时,此错误才会在运行时发生。

如果发生在运行时,检查包含该方法的类是否在类路径中。 检查是否添加了新版本的JAR,方法是否兼容。

试试这种方法:删除项目目录下的所有.class文件(当然,还有所有子目录)。重建。

有时mvn clean(如果您使用maven)不会清除javac手动创建的.class文件。这些旧文件包含旧签名,导致NoSuchMethodError。

我刚刚通过重新启动Eclipse并运行应用程序解决了这个错误。 我的情况可能是因为我在没有关闭项目或Eclipse的情况下替换了源文件。 这导致了我使用的不同版本的类。

为了我的案子。我必须检查其他参考方法。我需要将各处的方法签名更改为与新更新的方法签名相同。

例如,将特定方法的返回类型从集合更改为数组列表。