Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.put(Ljava/lang/Object;)V

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.put(Ljava/lang/Object;)V

我的代码行导致错误:

if(!refreshInputStream())
    return;
Workbook workbook = new org.apache.poi.xssf.usermodel.XSSFWorkbook(datasetInputStream);

刷新输入流函数:

private boolean refreshInputStream(){
    if(this.datasetInputStream == null){
        if(this.dataset.length() <= 0){
            return  false;
        }
        try {
            datasetInputStream = new FileInputStream(new File(dataset));
        }catch (Exception ex){
        }
    }
    return true;
}

Class 个变量:

public String dataset;
private InputStream datasetInputStream;

还有一个函数可以在到达发生错误的行之前将文件的位置(如C:\Users\Jaysmito774.xlsx)存储在数据集变量中。

错误:

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.put(Ljava/lang/Object;)V
    at org.apache.poi.xssf.model.SharedStringsTable.<clinit>(SharedStringsTable.java:94)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
    at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:63)
    at org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:648)
    at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:180)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:286)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:307)
    at App.searchLocal(App.java:238)
    at App.actionPerformed(App.java:207)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access0(EventQueue.java:97)
    at java.awt.EventQueue.run(EventQueue.java:709)
    at java.awt.EventQueue.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue.run(EventQueue.java:733)
    at java.awt.EventQueue.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我正在尝试打开文件。

https://rbidocs.rbi.org.in/rdocs/content/docs/68774.xlsx

我正在使用 Apache POI 版本 4.0.0。我删除了不必要的 GUI 代码,以便更容易阅读问题。我的代码有什么问题,我该如何解决?

我的依赖项:

  1. xmlbeans-4.0.0.jar

  2. poi.ooxml-schemas-4.1.2.jar

  3. commons-codec-1.10.jar

  4. commons-compress-1.18.jar

  5. commons-collections4-4.2.jar

  6. curvesapi-1.04.jar

  7. poi-4.0.0.jar

  8. poi-ooxml-4.0.0.jar

问题是您的项目依赖于 xmlbeans-4.0.0.jar。 Apache POI 4.0.0 需要 XMLBeans 版本 3.0.1,XMLBeans 4.0.0 版本有不兼容的更改,不能与 Apache POI 的 4.x 版本一起使用。您需要将 XMLBeans 依赖项降级到 3.0.1(或至少 3.x 版本),或者将 Apache POI 升级到 5.0.0.

在相关说明中,您也在混合使用 POI 本身的版本。您依赖于 poi.ooxml-schemas-4.1.2.jar,而您所有其他 POI 依赖项都是 4.0.0。如果您想使用 Apache POI 4.x,则对所有 POI 依赖项使用相同的 4.x 版本。

此外,Apache POI 4.0.0 的二进制分发依赖于 commons-codec-1.11.jar,而非 1.10,以及 curvesapi-1.05.jar,而非 1.04;尽管这些版本可能兼容。

如果这是一个新项目,我建议您从 https://poi.apache.org/ 上的 Apache POI 5.0.0 开始。使用二进制分发包中包含的依赖项(在 zip 的 libooxml-lib 文件夹中),或者更好的是,切换到 Apache Maven 或 Gradle,并让它处理您的依赖项。