首页 > 解决方案 > java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;

问题描述

请我需要一些关于错误的帮助。我有一个带有以下 jar 文件的 javafx 项目

我需要的是向它导入一些excel数据。我已经导入了上面的jar文件

但不幸的是,当我尝试运行该项目时,我得到了错误:

Caused by: java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;
at app.controllers.ContentAreaController.nextActionReport(ContentAreaController.java:734)
... 62 more

我试过谷歌搜索,建议我更改 poi lib 文件的版本,但没有运气。任何人都可以建议我解决方案,因为我在这个问题上花了足够的时间

标签: javaexcelapache-poi

解决方案


对答案提出一些评论 - 您的类路径中有较旧的 Apache POI jar。根据此 POI FAQ - 不支持在版本之间混合 POI jar

您需要做的只是移除旧的 POI 罐子。我只是说,因为你不知道你有它们......幸运的是,如果你遵循这个 Apache POI FAQ 中的代码,它将帮助你找到旧 jars 的来源。在有问题的系统上运行时,应该打印出旧 jar 的名称和位置:

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.usermodel.HSLFSlideShow.class.getClassLoader();
res = classloader.getResource("org/apache/poi/hslf/usermodel/HSLFSlideShow.class");
path = res.getPath();
System.out.println("POI Scratchpad came from " + path);

只需识别您不想要的旧罐子,删除,您就应该设置好!


推荐阅读