POI操作Excel报错java.lang.NoSuchMethodError
- 原创
- |
- 浏览:11663
- |
- 更新:
使用poi做Excel导出功能时,本地服务器正常,服务器下载为空白文档。检查服务器日志时报错:java.lang.NoSuchMethodError: org.apache.poi.util.POILogger.log(I[Ljava/lang/Object;)V
方法/步骤
检查报错日志如下
![POI操作Excel报错java.lang.NoSuchMethodError]()
定位错误
1、可能是编码出问题,检查编码
- 相关内容非法爬取自百度经验
生成EXCEL文件类是否有如下编码:
response.setContentType("application/x-msdownload");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
2、检查导入poi的包是否存在多个版本,删除多余版本。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
如果不确定自己引用的是哪个包,可以用一下代码检测class文件走哪个jar包
![POI操作Excel报错java.lang.NoSuchMethodError]()
检测class文件代码:
ClassLoader classloader =
org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
"org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("POI Core came from " + path);
classloader = org.apache.poi.POIXMLDocument.class.getClassLoader();
res = classloader.getResource("org/apache/poi/POIXMLDocument.class");
path = res.getPath();
System.out.println("POI OOXML came from " + path);
classloader = org.apache.poi.hslf.HSLFSlideShow.class.getClassLoader();
res = classloader.getResource("org/apache/poi/hslf/HSLFSlideShow.class");
path = res.getPath();
System.out.println("POI Scratchpad came from " + path);
将旧的jar从Java build path中删除掉,把workspace里面的包删了再把project clean一下,然后重新部署。
END

