使用POI导入EXCEL报java.lang.IncompatibleClassChangeError

转载 2016年05月30日 14:49:35

使用POI导入xls格式的excel报java.lang.IncompatibleClassChangeError异常,而导入xlsx正常。

oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_GENERIC_MESSAGE. Tokens: MESSAGE = oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.IncompatibleClassChangeError, msg=null;  

 

I'm almost certain that you have an older version of POI on your classpath

 基本可以确定,是包含了一个老版本的POI导致的。

 

通过在服务器上编译,发现此致命错误

found : org.apache.poi.hssf.usermodel.HSSFWorkbook
required: org.apache.poi.ss.usermodel.Workbook

 

几经检查,都没有发现有其他版本的POI。最终,参考官方FAQ文档,

复制代码
ClassLoader classloader =
   org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
java.net.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);
复制代码

定位到原因是以前有人将POI包直接解压到了JAVA_TOP路径下,所以和我的产生了冲突。

啊,多么痛的领悟。

再三检查,靠,那哥们儿解压的POI已经不知道是哪个年月的版本的了。

心中真是有一万个草泥马在狂飙。真想揪出来打一顿。

 

终极大招:

将java源文件丢到服务器上编译,根据报错再一个个导入class文件。

 

好不容易编译时通过,结果报了运行时异常:

oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_GENERIC_MESSAGE. Tokens: MESSAGE = oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.NoSuchMethodError, msg=org/apache/poi/poifs/filesystem/POIFSFileSystem.getRoot()Lorg/apache/poi/poifs/filesystem/DirectoryNode;;  

Exception  in  thread "main" java.lang.NoSuchMethodError: org/apache/poi/POIDocument.<init>(Lorg/apache/poi/poifs/filesystem/DirectoryNode;)V

最后才发现是poi中各jar版本冲突 ,例如 其他包都是用的3.8的,但是poi.jar用的是3.6的版本,所以就报错了,将3.6的删掉,加入3.8的版本即可。

最后,迫不得已,放出最后杀招:将那哥们儿的先备份了,然后直接删除。

 

参考资料:

java.lang.IncompatibleClassChangeError:

POI 3.7 java.lang.IncompatibleClassChangeError when instantiating a Font

Frequently Asked Questions

提取文本内容二:提取word格式文档内容

相关文章推荐

An error has occurred. See error log for more details. java.lang.IncompatibleClassChangeError

An error has occurred. See error log for more details.java.lang.IncompatibleClassChangeError

java.lang.IncompatibleClassChangeError: BasicHttpParams

java.lang.IncompatibleClassChangeError:关于上面的异常,基本就是不兼容导致的,也许有时你开发时,没问题,但正式发布release时,出现崩溃了,这种情况也是有的。...

Android 修改multiDexEnabled true后友盟显示java.lang.IncompatibleClassChangeError的一种解决方案

今天遇见了一个比较坑的问题,我会把问题描述一下,供以后查阅。 因为自己的项目方法超过了65536个,我必须在项目里加入multiDexEnabled true,才可以继续编包,但是这个时候,发现友盟...

java错误:java.lang.IncompatibleClassChangeError: Implementing class

解决 BUG :java.lang.IncompatibleClassChangeError: Implementing class

Caused by: java.lang.IncompatibleClassChangeError: Implementing class

1、错误描述严重: StandardWrapper.Throwable org.apache.cxf.bus.extension.ExtensionException at org.apache.c...

hadoop2.6.0+hive1.2启动报错java.lang.IncompatibleClassChangeError

hadoop2.6.0+hive1.2启动报错java.lang.IncompatibleClassChangeError

使用POI实现在java程序中导入导出Excel文件数据

使用POI实现在java程序中导入导出Excel文件数据

Java中使用poi导入、导出Excel

Java中使用poi导入、导出Excel

Java 使用POI实现Excel表格的导入导出

1.介绍最近的项目需要导出数据到Excel表格里,写个Demo测试一下,还是比较简单的,写在博客里记录下来,分享给童鞋们。需要导入POI.jar包,下载地址:2.实现已经在代码中加入了完整的注释。im...

Java中使用Apache POI实现数据的Excel导入和导出

一、首先引入Apache POI jar包(目前较新版本) 1、poi-ooxml-3.15.jar(推荐使用) 下载地址: http://central.maven.org/maven2/or...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)