我得到一个NoSuchMethodError错误时运行我的Java程序。出了什么问题,我该怎么解决?
当前回答
这意味着相应的方法在类中不存在:
如果您正在使用jar,那么反编译并检查jar的各个版本是否有适当的类。 检查是否从源代码编译了正确的类。
其他回答
对我来说,它发生了,因为我改变了函数中的参数类型,从对象a,到字符串a。我可以用清洁和重新构建来解决它
在没有更多信息的情况下,很难确定问题,但根本原因是您很可能针对缺少方法的类的不同版本编译了一个类,而不是您在运行时使用的类。
查看堆栈跟踪…如果在对库中的对象调用方法时出现异常,则很可能在编译和运行时使用了该库的不同版本。确保这两个地方都有正确的版本。
如果在对由您创建的类实例化的对象调用方法时出现异常,那么您的构建过程似乎是错误的。确保在编译时更新了实际运行的类文件。
我通过重命名一个Junit测试文件在Eclipse中解决了这个问题。 在我的Eclipse工作空间中,我有一个App项目和一个Test项目。 Test项目将App项目作为构建路径上的必需项目。
开始获取NoSuchMethodError。 然后我意识到Test项目中的类与App项目中的类具有相同的名称。
App/
src/
com.example/
Projection.java
Test/
src/
com.example/
Projection.java
在将测试重命名为正确的名称“ProjectionTest.java”后,异常消失了。
我也遇到过类似的问题。
Caused by: java.lang.NoSuchMethodError: com.abc.Employee.getEmpId()I
最后,我发现根本原因是改变了变量的数据类型。
java——>包含数据类型从int改为String的变量(EmpId)。 使用getter getEmpId()检索值。
我们应该通过只包含修改过的类来重新打包jar。由于在ReportGeneration.java中没有任何变化,我只是在Jar文件中包含了Employee.class。我必须在jar中包含ReportGeneration.class文件来解决这个问题。
如果您的文件名与包含main方法的类名不同,则可能会导致此错误。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap