您的位置:首页 > 编程语言 > Java开发

POI生成(Excel 2007).xlsx文件时报“java.lang.NoSuchMethodError”错误的解决

2016-07-20 11:52 489 查看
概述:本文主要讲了笔者在MyEclipse 8.6平台下利用POI生成.xlsx文件时报“java.lang.NoSuchMethodErrorjavax.xml.stream.XMLEventFactory.newFactory()LjavaxxmlstreamXMLEventFactory”错误的问题的解决。笔者从stackoverflow得知Apache POI生成.xlsx文件的前提条件是Java版本不低于1.6.0_18,由于MyEclipse8.6默认的JRE版本是1.6.0_13,笔者将JRE版本改到了1.7.0_80,可结果还是出现原来的错误。从朋友得知,在JRE和Jar包相同的情况下,新版的MyEclipse
10可以解决该问题。于是改用MyEclipse 10,问题解决。尽管如此,笔者暂时搞不清为何在运行环境、编译器版本、Jar包相同的情况下,不同版本的MyEclipse会有不同的效果,希望知道原理的朋友留言反馈,也可以给大家一个参考,节省大家时间精力。

下面详细描述一下解决问题的过程。

1. 运行环境:

IDE:MyEclipse 8.6

JRE版本:1.6.0_13

引用Jar包:

(POI相关)

poi-3.11-20141221.jar

poi-ooxml-3.11-20141221.jar

poi-ooxml-schemas-3.11-20141221.jar

xmlbeans-2.6.0.jar

(Junit相关)

hamcrest-core-1.3.jar

junit-4.12.jar

2. Java代码:

package cn.test;

importjava.io.FileOutputStream;
importorg.apache.poi.xssf.usermodel.XSSFCell;
importorg.apache.poi.xssf.usermodel.XSSFRow;
importorg.apache.poi.xssf.usermodel.XSSFSheet;
importorg.apache.poi.xssf.usermodel.XSSFWorkbook;
importorg.junit.Test;

public class TestPOI2Excel {

//07版本Excel的导入
@Test
public void testWrite07Excel() throws Exception {
//System.out.println(Runtime.class.getPackage().getImplementationVersion());
// 1、创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 2、创建工作表
XSSFSheet sheet = workbook.createSheet("hello world"); // 指定工作表名称
// 3、创建行;创建第3行
XSSFRow row = sheet.createRow(2);
// 4、创建单元格;创建第3行第3列
XSSFCell cell = row.createCell(2);
cell.setCellValue("hello world");

// 输出到硬盘
FileOutputStream outputStream = new FileOutputStream(
"D:\\yzz\\测试.xlsx");
// 把excel输出到具体地址
workbook.write(outputStream);
workbook.close();
outputStream.close();
}
}


3. 运行程序时报NoSuchMethodError错误:



4. 虽然修改了JRE,程序依旧报错:





5. 改用MyEclipse 10 版本程序顺利运行:



本文为“叶子竹”原创作品,转载请注明“叶子竹”及本文所在链接,谢谢!



叶子竹的微信公众号

引:

[1] stackoverflow上关于使用POI产生NoSuchMethodError问题的解答:

http://stackoverflow.com/questions/26866398/nosuchmethoderror-in-main-thread-while-reading-xlsx-using-apache-poi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息