簡體   English   中英

java.lang.NoSuchMethodError:org.apache.poi.xssf.usermodel.XSSFWorkbook。 <init> (Ljava / IO / InputStream的;)V

[英]java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(Ljava/io/InputStream;)V

我在我的類路徑中包含了dom4j-1-6.jar,poi 3.9 jar,poi ooxml模式3.9 jar,poi ooxml 3.9 jar,xmlbeans-2.3.0.jar我使用了如下語法

InputStream ExcelFileToRead = new FileInputStream(relative+"/"+docName);
         XSSFWorkbook  wb_hssf  = new XSSFWorkbook(ExcelFileToRead);

我收到以下錯誤,

java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(Ljava/io/InputStream;)V
    at com.admin.upload_images.doPost(upload_images.java:1057)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:182)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)

實際上有一個涉及此案例Apache POI FAQ條目 ,您應該閱讀。 不過基本上,在運行時,您不會使用針對其編譯的POI jar。 相反,您正在以某種方式使用其他版本。 這可能是因為您部署了不同的jar,也可能是因為您的運行時,容器或框架附帶了其他POI jar或其他錯誤。 按照此POI常見問題解答,所有POI罐也必須來自相同版本。

因此,如果您無法發現問題所在,則需要在FAQ代碼段幫助下在運行時查看類路徑,然后刪除不匹配的POI jar,以便僅保留在編譯時使用的POI jar。 您的代碼將可以正常工作

但是,您的代碼還有其他一些問題! 一種是擁有文件時使用的是InputStream。 正如Apache POI文檔中所述 ,這是不好的,因為它使用了更多的內存。 更改它以使用文件代替,例如與此

Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));

其次,Apache POI 3.9現在有點舊,並且從那時起已有大量錯誤修復 ,因此您應該升級到最新版本(撰寫本文時為3.11或3.12 beta 1)

作為例外建議,即使您包括該方法存在的版本,該構建也正在考慮該方法不存在的較舊版本。 要進行測試,請檢查您的maven依賴關系樹並刪除較舊的版本。 容器中可能還會出現較舊的版本,因此請正確檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM