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


当前回答

NoSuchMethodError:我花了几个小时来修复这个问题,最终通过重命名包名来修复它,清洁和构建…尝试清洁构建首先,如果它不工作尝试重命名类名或包名和清洁构建…它应该被修复。祝你好运。

其他回答

这意味着相应的方法在类中不存在:

如果您正在使用jar,那么反编译并检查jar的各个版本是否有适当的类。 检查是否从源代码编译了正确的类。

这也可以是使用反射的结果。如果你的代码反映了一个类,并通过名称提取了一个方法(例如:with class。getDeclaredMethod("someMethodName", .....)),那么每当方法名称发生变化时,例如在重构期间,您将需要记住更新反射方法的参数以匹配新的方法签名,否则getDeclaredMethod调用将抛出NoSuchMethodException。

如果这是原因,那么堆栈跟踪应该显示调用反射方法的点,您只需要更新参数以匹配实际的方法签名。

根据我的经验,当单元测试私有方法/字段,并使用TestUtilities类提取字段以进行测试验证时,偶尔会出现这种情况。(通常在设计时没有考虑到单元测试的遗留代码。)

如果您有权更改JVM参数,那么添加详细输出将允许您查看从哪个JAR文件加载了哪些类。

java -verbose:class <other args>

当你的程序运行时,JVM应该转储到标准输出信息,例如:

... [加载junit.framework.Assert from file:/C:/Program%20Files/junit3.8.2/junit.jar] ...

我也遇到过同样的问题。我改变了一个方法的返回类型,并运行了这个类的测试代码。这就是我面对这个NoSuchMethodError的时候。作为一种解决方案,在再次运行测试代码之前,我在整个存储库上运行了一次maven构建。这个问题在下一次测试运行中得到了解决。

我也有你的问题,我就是这么解决的。下面的步骤是添加库的一种工作方式。我已经正确地完成了前两个步骤,但是我没有完成最后一个步骤,即直接将“.jar”文件从文件系统拖到eclipse项目的“lib”文件夹中。此外,我必须从构建路径和“lib”文件夹中删除之前版本的库。

步骤1 -添加.jar构建路径

步骤2 -关联源和javadocs(可选)

步骤3 -实际拖动。jar文件到“lib”文件夹(非可选)