为什么我收到java.lang.AbstractMethodError错误?

时间:2013-07-31 11:41:09

标签: java thrift

ABstractMethodError的可能原因是什么?

线程“pool-1-thread-1”中的异常java.lang.AbstractMethodError:

org.apache.thrift.ProcessFunction.isOneway()Z
    at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:51)
    at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
    at com.gemfire.gemstone.thrift.hbase.ThreadPoolServer$ClientConnnection.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

9 个答案:

答案 0 :(得分:47)

这通常意味着您使用的旧版本的接口实现缺少新的接口方法。例如,java.sql.Connection接口在1.7中获得了一个新的getSchema方法。如果您有1.6 JDBC驱动程序并调用Connection.getSchema,您将获得AbstractMethodError。

答案 1 :(得分:19)

简单的答案是这样的:一些代码试图调用一个声明为abstract的方法。抽象方法没有主体,无法执行。由于您提供的信息很少,因此我无法详细说明如何实现这一点,因为编译器通常会遇到此问题 - as described here, this means the class must have changed at runtime.

答案 2 :(得分:4)

来自AbstractMethodError

的文件
  

当应用程序尝试调用抽象方法时抛出。一般,   编译器捕获此错误;此错误只能在运行时发生   时间,如果某个类的定义自那以后不一致改变了   最后编译了当前正在执行的方法。

答案 3 :(得分:0)

如果您在实现的方法上遇到此错误,请确保已按照this thread中的说明正确添加了依赖项。

答案 4 :(得分:0)

如达米安所说:

  

通常,编译器会捕获此错误;此错误只能   如果[...]

我遇到了与编译器未捕获但在运行时相同的错误。为了解决这个问题,我只再次编译而未对代码进行任何修改。

答案 5 :(得分:0)

上述answer的一种特殊情况。

我有此错误,因为我使用的是spring-boot-starter-parent(例如2.1.0.RELEASE使用的是春季版本:5.1.2.RELEASE),但我包括了{{1 }},它也定义了一些spring依赖关系,但版本较旧(例如BOM)。

因此,要做的一件事就是检查您的5.0.9.RELEASE(在Eclipse中,例如,您可以使用依赖关系层次结构)。

一种解决方案可能是升级dependency tree中的spring依赖项,另一种可能是排除它们(但取决于数量,这可能很丑陋)。

答案 6 :(得分:0)

如果您下载了任何项目zip文件,则将其解压缩并导入Android Studio后,您将无法运行该项目,因为发生了此错误。

我通过删除android studio摆脱了问题,然后下载并安装了新版本。

我真的希望它能对您有所帮助。

答案 7 :(得分:0)

如果您在使用 Proguard 的缩小构建中遇到此错误,请检查该类是否为 POJO 类,如果是,则使用以下规则将其从 Proguard 中排除:

-keep class your.application.package.pojo.** {*;}

答案 8 :(得分:0)

当我将 eclipse 项目导入到 intellij ide 时,我遇到了同样的错误。我尝试在没有 .iml 文件的情况下导入它,然后我的问题就解决了