为何调用XSSFCellStyle.getFillBackgroundColorColor()时出现AbstractMethodError?
java.lang.AbstractMethodError调用POI单元格颜色方法的问题 这个错误其实很典型,咱们一步一步拆解清楚:
错误核心原因
java.lang.AbstractMethodError本质是编译时你调用的接口/抽象类方法,在运行时的实际实现类里不存在。放到你的场景里:
你调用的getFillBackgroundColorColor()是Apache POI中CellStyle接口的方法,但运行时加载的XSSFCellStyle实现类(来自POI的XSSF包)并没有实现这个方法——大概率是你的项目缺少POI核心依赖包,或者POI版本不兼容。
而且你提到WEB-INF/lib里只有ojdbc5.jar和ojdbc6.jar,这就是关键问题!getFillBackgroundColorColor()是Apache POI的专属API,和JDBC驱动(ojdbc)完全没关系,你的项目根本没把POI的相关jar包部署进去,或者部署的版本和编译时用的不一致。
具体解决步骤
补充POI必要依赖包
因为你处理的是XLSX格式(用到了XSSFCellStyle),必须把以下POI相关jar包放到WEB-INF/lib中:poi.jar:POI核心功能包poi-ooxml.jar:处理OOXML格式(XLSX)的核心包poi-ooxml-schemas.jar:OOXML格式的Schema支持包- 辅助依赖:
commons-codec.jar、commons-collections4.jar、commons-logging.jar、curvesapi.jar、xmlbeans.jar(这些是POI运行必需的辅助包)
保证POI版本完全一致
所有POI相关的jar包必须是同一个稳定版本(比如都用4.1.2、5.2.3等),绝对不能混合不同版本的POI包——比如用了POI 5.x的poi.jar,却配了POI 3.x的poi-ooxml.jar,这种版本不兼容一定会导致方法找不到的错误。对齐编译与运行环境的POI版本
如果你在IDE中编译代码时用了某个版本的POI依赖,那部署到WEB-INF/lib的jar包必须和这个版本完全一致。比如旧版本POI的CellStyle接口根本没有getFillBackgroundColorColor()方法,这个方法是较新版本才添加的,要是编译用了新版本、运行用了旧版本,肯定会报错。
额外小提醒
你可以先确认编译代码时使用的POI版本,然后去Apache POI官方仓库下载对应版本的完整jar包集合,解压后把需要的jar都放到WEB-INF/lib里,替换掉可能存在的旧版本POI包(如果有的话)。
内容的提问来源于stack exchange,提问作者Abhay Gupta

