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.sql.Connection接口在1.7中获得了一个新的getSchema方法。如果您有 1.6 JDBC 驱动程序并调用 Connection.getSchema 您将得到 AbstractMethodError。
简单的答案是这样的:某些代码正在尝试调用声明为
abstract
的方法。 抽象方法没有主体,无法执行。 由于您提供的信息太少,我无法真正详细说明这是如何发生的,因为编译器通常会捕获此问题 - 如此处所述,这意味着该类必须在运行时发生更改。
当应用程序尝试调用抽象方法时抛出。通常情况下, 这个错误被编译器捕获;该错误仅在运行时发生 如果某个类的定义自此以来发生了不兼容的更改 当前执行的方法是最后编译的。
如果您在使用 Proguard 的缩小构建中遇到此错误,请检查该类是否是 POJO 类,如果是,则使用以下规则将其从 Proguard 中排除:
-保留类 your.application.package.pojo.** {*;}
上述的一种特殊情况答案。
我遇到了这个错误,因为我使用的是
spring-boot-starter-parent
(例如2.1.0.RELEASE
使用spring版本:5.1.2.RELEASE
),但我也包含了BOM
,它也定义了一些spring依赖项,但在旧版本中(例如5.0.9.RELEASE
)。
因此要做的一件事是检查您的
dependency tree
(在 Eclipse 中,例如您可以使用依赖关系层次结构)如果您使用相同的版本。
因此,一种解决方案可能是升级
BOM
中的 spring 依赖项,另一种解决方案可能是排除它们(但根据数量,这可能很丑陋)。
如果您下载任何项目zip文件,解压并导入Android Studio后,您将无法运行该项目,因为发生了此错误。
我通过删除我的 android studio,然后下载并安装新版本解决了这个问题。
我真的希望它有帮助。
如果您在实现的方法上遇到此错误,请确保您已按照此线程中所述正确添加依赖项。
正如达米安引用的:
通常情况下,这个错误会被编译器捕获;这个错误只能 在运行时发生如果 [...]
我有同样的错误,但编译器没有捕获,而是在运行时捕获。为了解决这个问题,我只是重新编译了一下,没有对代码进行任何修改。
当我将 eclipse 项目导入 intellij ide 时,我遇到了同样的错误。我尝试在没有 .iml 文件的情况下导入它,然后我的问题就解决了
当我将 kotlin 插件更新到新版本时,我遇到了这个问题...问题是我的 pom 文件使用的是旧的 kotlin 版本..我想如果某人犯了这个错误,这可能会对他有所帮助
我在android上很少得到这些和其他的各种信息。我必须清理所有内容,更改一些配置,重建,再次将配置更改为正常,只是构建工具不会出于任何原因重建它们应该重建的所有内容(显然是Android gradle错误)。
当我升级到 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>