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

问题描述 投票:0回答:12

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)
java thrift
12个回答
73
投票

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


36
投票

简单的答案是这样的:某些代码正在尝试调用声明为

abstract
的方法。 抽象方法没有主体,无法执行。 由于您提供的信息太少,我无法真正详细说明这是如何发生的,因为编译器通常会捕获此问题 - 如此处所述,这意味着该类必须在运行时发生更改。


7
投票

来自 AbstractMethodError

的文档

当应用程序尝试调用抽象方法时抛出。通常情况下, 这个错误被编译器捕获;该错误仅在运行时发生 如果某个类的定义自此以来发生了不兼容的更改 当前执行的方法是最后编译的。


3
投票

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

-保留类 your.application.package.pojo.** {*;}


2
投票

上述的一种特殊情况答案

我遇到了这个错误,因为我使用的是

spring-boot-starter-parent
(例如
2.1.0.RELEASE
使用spring版本:
5.1.2.RELEASE
),但我包含了
BOM
,它也定义了一些spring依赖项,但在旧版本中(例如
5.0.9.RELEASE
)。

因此要做的一件事是检查您的

dependency tree
(在 Eclipse 中,例如您可以使用依赖关系层次结构)如果您使用相同的版本。

因此,一种解决方案可能是升级

BOM
中的 spring 依赖项,另一种解决方案可能是排除它们(但根据数量,这可能很丑陋)。


1
投票

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

我通过删除我的 android studio,然后下载并安装新版本解决了这个问题。

我真的希望它有帮助。


0
投票

如果您在实现的方法上遇到此错误,请确保您已按照此线程中所述正确添加依赖项。


0
投票

正如达米安引用的:

通常情况下,这个错误会被编译器捕获;这个错误只能 在运行时发生如果 [...]

我有同样的错误,但编译器没有捕获,而是在运行时捕获。为了解决这个问题,我只是重新编译了一下,没有对代码进行任何修改。


0
投票

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


0
投票

当我将 kotlin 插件更新到新版本时,我遇到了这个问题...问题是我的 pom 文件使用的是旧的 kotlin 版本..我想如果某人犯了这个错误,这可能会对他有所帮助


0
投票

我在android上很少得到这些和其他的各种信息。我必须清理所有内容,更改一些配置,重建,再次将配置更改为正常,只是构建工具不会出于任何原因重建它们应该重建的所有内容(显然是Android gradle错误)。


0
投票

当我升级到 Hibernate 5 时,我遇到了同样的问题。 你应该运行

mvn dependency:tree > dependency_tree.txt
。然后你寻找版本,例如我按
hibernate
过滤,发现我有两个不同版本的
org.hibernate:hibernate-validator:jar:5.0.1.Final:compile
。您可以在依赖关系树输出中检查如何添加此包,然后进入您的
pom.xml
并排除或删除您不想要的包。

对我来说,它添加了:

<exclusion>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
</exclusion>
© www.soinside.com 2019 - 2024. All rights reserved.