42

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)
4

9 回答 9

65

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

于 2013-07-31T12:15:16.817 回答
31

简单的答案是这样的:一些代码试图调用一个声明的方法abstract。抽象方法没有主体,无法执行。由于您提供的信息太少,我无法详细说明这是如何发生的,因为编译器通常会捕获此问题 -如此处所述,这意味着该类必须在运行时发生更改。

于 2013-07-31T11:44:27.363 回答
7

来自 AbstractMethodError 的文档

当应用程序尝试调用抽象方法时抛出。通常,这个错误会被编译器捕获;如果自上次编译当前执行的方法以来某些类的定义发生了不兼容的更改,则此错误只会在运行时发生。

于 2013-07-31T11:46:22.623 回答
2

上述答案的一种特例。

我遇到了这个错误,因为我使用的是 a spring-boot-starter-parent(例如2.1.0.RELEASE使用 spring 版本:) ,5.1.2.RELEASE但我包含了 a BOM,它也定义了一些 spring 依赖项,但在旧版本中(例如5.0.9.RELEASE)。

所以要做的一件事是检查您的dependency tree(在 Eclipse 中,例如,您可以使用 Dependency Hierarchy)是否使用相同的版本。

因此,一种解决方案可能是您升级您的 spring 依赖项BOM,另一种可能是您将它们排除在外(但取决于数量,这可能很难看)。

于 2018-11-13T18:11:05.350 回答
1

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

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

我真的希望它有所帮助。

于 2019-09-19T16:28:59.443 回答
0

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

于 2016-12-14T13:04:53.553 回答
0

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

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

于 2021-02-12T10:37:34.037 回答
0

正如达米安所引用的:

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

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

于 2018-06-28T12:30:08.413 回答
0

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

于 2021-08-10T14:03:51.993 回答