java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.getMergedRegions()

前言

今天在做ExcelHTML的时候出现了一个异常

异常

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.getMergedRegions()Ljava/util/List;
	at org.apache.poi.hssf.converter.ExcelToHtmlUtils.buildMergedRangesMap(ExcelToHtmlUtils.java:49)
	at org.apache.poi.hssf.converter.ExcelToHtmlConverter.processSheet(ExcelToHtmlConverter.java:667)
	at org.apache.poi.hssf.converter.ExcelToHtmlConverter.processWorkbook(ExcelToHtmlConverter.java:752)
	at com.info.comm.utils.ExcelToThtml.excelToHtml(ExcelToThtml.java:57)
	at com.info.comm.utils.ExcelToThtml.main(ExcelToThtml.java:91)
分析原因

java.lang.NoSuchMethodError:这个异常是找不到方法,这就很奇怪。如果编译时不出错,而在运行时出错一般是因为找不到JAR包,而找不到JAR包的原因有几种:

  • 一、是JAR包未导入
  • 二、其实包是有的,但是版本不对
  • 三、JAR包全都放到lib包下,但是引用时包冲突了,有相同的JAR
解决办法

1、查看 JAR 包是否引入了,我这里 JAR 包已经引入。
2、在用到该方法的方法下打印下面这句代码,用以确定包的具体路径。然后反编译看看里面是否有相应的方法。

注意:HSSFWorkbook是类名
System.out.println(HSSFWorkbook.class.getProtectionDomain().getCodeSource().getLocation());

打印结果如下

file:/E:/Users/Administrator/EclipseProjects/WipWork/Info/WebRoot/WEB-INF/lib/poi-3.10-FINAL-20140208.jar

这下找到原因了,原来我本来项目里已经有了一个低版本的 JAR 包,我自己又导入了一个高版本的 JAR 包,所以我这里的情况是 JAR 包冲突引入的。
java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.getMergedRegions()_第1张图片
可以看到里面的包结构完全一模一样,我把低版本的 JAR 包移除后成功运行。
3、如果还是报错,要么保留高版本的 JAR 包,要么保留低版本的 JAR 包。

总结

遇到类似 java.lang.NoSuchMethodError 异常都可以通过以上步骤进行解决,如有疑问欢迎留言。
参考:https://www.cnblogs.com/lyf22/p/3898843.html

================================================================================
感谢阅读,写得不好的地方请指教,能帮助到你是对我最好的回报,不卑不亢,加油。
请你记住比你优秀的一定比你努力,比你努力的人一定比你优秀。
================================================================================

你可能感兴趣的:(JAVA)