java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;

Tat*_*ere 5 java excel apache-poi

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

  • fontawesome-fx-8.1.jar
  • sqlite-jdbc-3.8.10.1.jar
  • controlfx-8.40.11.jar
  • sqljdbc42.jar
  • jfoenix-1.0.0.jar
  • POI-3.17.jar
  • poi-examples-3.17.jar
  • poi-excelant-3.17.jar
  • poi-ooxml-3.17.jar
  • poi-ooxml-schemas-3.17.jar
  • poi-scratchpad-3.17.jar

我需要的是向其中导入一些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
Run Code Online (Sandbox Code Playgroud)

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

Gag*_*arr 5

对答案进行一些评论 - 您的类路径上有较旧的 Apache POI jar。根据这个 POI FAQ - 不支持在版本之间混合 POI jars

您需要做的只是移除旧的 POI 罐子。我只是说,因为您不知道您拥有它们...幸运的是,如果您遵循此 Apache POI 常见问题解答中的代码,它将帮助您找到旧 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);
Run Code Online (Sandbox Code Playgroud)

只需确定您不想要的旧罐子,移除,您就应该设置好!