我需要一些关于错误的帮助。我有一个包含以下 jar 文件的 javafx 项目
- fontawesome-fx-8.1.jar
- sqlite-jdbc-3.8.10.1.jar
- controlsfx-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
我试过谷歌搜索,建议我更改 poi lib 文件的版本,但没有运气。任何人都可以建议我解决方案,因为我已经在这个问题上花费了足够的时间
最佳答案
将一些评论提升为答案 - 您的类路径中有较旧的 Apache POI jar。根据 this POI FAQ - mixing POI jars between versions is not supported
您需要做的是只是删除旧的 POI jar 。我说只是,因为你不知道你有它们......幸运的是,if you follow the code in this Apache POI FAQ it'll help you find where the older jars are coming from .在有问题的系统上运行时,像这样的东西应该打印出旧 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);
只需找出您不想要的旧 jar ,将其移除,然后您就可以设置了!
关于java.lang.NoSuchMethodError : org. apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50469433/