我得到一个NoSuchMethodError错误时运行我的Java程序。出了什么问题,我该怎么解决?
当前回答
我也遇到过同样的问题。当类中存在模糊性时,也会出现这种情况。我的程序试图调用一个方法,该方法存在于两个JAR文件中,位于相同的位置/类路径。删除一个JAR文件或只使用一个JAR文件来执行代码。检查您使用的不是相同的JAR,也不是包含相同类的同一个JAR的不同版本。
DISP_E_EXCEPTION [step] [] [Z-JAVA-105 Java异常Java .lang. nosuchmethoderror (com.example.yourmethod)]
其他回答
试试这种方法:删除项目目录下的所有.class文件(当然,还有所有子目录)。重建。
有时mvn clean(如果您使用maven)不会清除javac手动创建的.class文件。这些旧文件包含旧签名,导致NoSuchMethodError。
如果使用Maven或其他框架,并且您几乎随机地得到这个错误,请尝试像这样干净地安装…
clean install
如果您编写了对象并且知道它有方法,那么这种方法尤其可能工作。
如果您的文件名与包含main方法的类名不同,则可能会导致此错误。
这也可以是使用反射的结果。如果你的代码反映了一个类,并通过名称提取了一个方法(例如:with class。getDeclaredMethod("someMethodName", .....)),那么每当方法名称发生变化时,例如在重构期间,您将需要记住更新反射方法的参数以匹配新的方法签名,否则getDeclaredMethod调用将抛出NoSuchMethodException。
如果这是原因,那么堆栈跟踪应该显示调用反射方法的点,您只需要更新参数以匹配实际的方法签名。
根据我的经验,当单元测试私有方法/字段,并使用TestUtilities类提取字段以进行测试验证时,偶尔会出现这种情况。(通常在设计时没有考虑到单元测试的遗留代码。)
我通过重命名一个Junit测试文件在Eclipse中解决了这个问题。 在我的Eclipse工作空间中,我有一个App项目和一个Test项目。 Test项目将App项目作为构建路径上的必需项目。
开始获取NoSuchMethodError。 然后我意识到Test项目中的类与App项目中的类具有相同的名称。
App/
src/
com.example/
Projection.java
Test/
src/
com.example/
Projection.java
在将测试重命名为正确的名称“ProjectionTest.java”后,异常消失了。
推荐文章
- 将JSON字符串转换为HashMap
- web - inf在Java EE web应用程序中用于什么?
- Java 8: Lambda-Streams,过滤方法与异常
- 将JsonNode转换为POJO
- 如何查看IntelliJ中的编译错误列表?
- Java SimpleDateFormat("yyyy-MM-dd' t ' hh:mm:ss' z '")给出的时区为IST
- 杰克逊克服下划线,支持骆驼案
- List、List<?>, List<T>, List<E>, List<Object>
- 在Java中转换字符串到日历对象
- 在java中使用wait()和notify()的简单场景
- 增强的for循环中的Null检查
- c# vs Java Enum(适合c#新手)
- 如何在不强制转换的情况下将double转换为long ?
- for循环和for-each循环在性能上有区别吗?
- 你如何比较两个版本的字符串在Java?