1

I am developing a java-web-start application that reads excel files using java POI. My problem is whenever I run my code it returns an error.

Exception in thread "Thread-13" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/WorkbookFactory
    at digicare.tracking.serial.BulkUpload.UploadProgress$1read2.run(UploadProgress.java:89)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.WorkbookFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)

Here's my code:

try {
            InputStream inp = new FileInputStream(FilePath);
        Workbook wb = WorkbookFactory.create(inp);
        Sheet sheet = wb.getSheetAt(0);
        int maxrows = sheet.getPhysicalNumberOfRows();
        for (int r = 1; r < maxrows; r++) { 
            Thread.sleep(1000);
            lblCurrentRow.setText(String.valueOf(r));
            prbProgBar.setValue(r);                                       
                    txtOutPut.append(String.format("Done!!\n"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
4

3 回答 3

1

之前遇到过,其实不只一个jar文件要添加,还有一个,命名为:poi-ooxml-x.jar(其中x是版本),是这个文件包含WorkbookFactory,而不是poi-x .jar,你必须同时包含它们

----------------------------------------------------------------------------

编辑 我做了一些研究,我认为您的类路径问题与您的项目是 java web start 应用程序有关:

我可以依赖 Manifest 文件中的 Class-Path 吗?

Java Web Start 不支持清单文件中的 Class-Path 条目。Class-Path 属性完全以文件为中心,而Java Web Start 和JNLP 则以Web 为中心,即基于URL。因此,这两个模型不容易合并。

您可以在 JNLP 文件中列出多个 JAR 文件,而不是依赖于 Class-Path 条目,例如:

<resources>
     <jar href="A.jar"/> 
     <jar href="B.jar"/>  
</resources>

这是我找到它的链接:http ://webstartfaq.com/#52

于 2013-09-13T11:25:26.930 回答
0

看起来它找不到 WorkbookFactory。假设您已将 Apache POI jar 放在构建路径中。你能看到 org.apache.poi.ss.usermodel.WorkbookFactory 类是否存在于它自己的 jar 文件中吗?

于 2013-09-13T11:15:09.870 回答
0

您缺少一些 POI 罐子。具体来说,您肯定缺少poi-ooxml罐子,但您也可能缺少其他一些罐子......

Apache POI 提供了一个方便的页面列出组件、它们的 jar 和它们的依赖项。正如该页面所解释的,如果您想使用公共org.apache.poi.ss.usermodel类(例如WorkbookFactory),您需要主 POI jar、POI-OOXML jar 以及它们各自的依赖项。

如果您添加这两个 jar及其依赖项,和/或切换到 maven 并将您的项目列为取决于poiplus poi-ooxml,您将拥有所需的类

于 2013-09-13T11:51:49.063 回答