2016-01-22 74 views
0

我是java的初学者,我不知道为什么我得到这个错误。
我使用Excel 2007中线程“main”中的异常java.lang.NoClassDefFoundError:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at com.ExcelRead.SimpleExcelWriterExample.main(SimpleExcelWriterExample.java:15) 
    Caused by: java.lang.ClassNotFoundException: org.apache.poi.UnsupportedFileFormatException 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     ... 13 more 

这里是我的代码:

package com.ExcelRead; 

    import java.io.FileOutputStream; 
    import java.io.IOException; 

    import org.apache.poi.ss.usermodel.Cell; 
    import org.apache.poi.ss.usermodel.Row; 
    import org.apache.poi.xssf.usermodel.XSSFSheet; 
    import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

    public class SimpleExcelWriterExample { 


     public static void main(String[] args) throws IOException { 
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet sheet = workbook.createSheet("Java Books"); 

      Object[][] bookData = { 
        {"Head First Java", "Kathy Serria", 79}, 
        {"Effective Java", "Joshua Bloch", 36}, 
        {"Clean Code", "Robert martin", 42}, 
        {"Thinking in Java", "Bruce Eckel", 35}, 
      }; 

      System.out.println("array created"); 
      int rowCount = 0; 

      for (Object[] aBook : bookData) { 
       Row row = sheet.createRow(++rowCount); 

       int columnCount = 0; 

       for (Object field : aBook) { 
        Cell cell = row.createCell(++columnCount); 
        if (field instanceof String) { 
         cell.setCellValue((String) field); 
        } else if (field instanceof Integer) { 
         cell.setCellValue((Integer) field); 
        } 
       } 

      } 
      System.out.println("inserted in bookData."); 


      try (FileOutputStream outputStream = new FileOutputStream("JavaBooks.xlsx")) { 

       System.out.println("JavaBooks................"); 
       workbook.write(outputStream); 
      } 
     } 

    } 



    ________________________________________________________________________________ 

我还添加POI的罐子,也构建路径,这是pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 

     <groupId>com</groupId> 
     <artifactId>ExcelRead</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <packaging>jar</packaging> 

     <name>ExcelRead</name> 
     <url>http://maven.apache.org</url> 

     <properties> 
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     </properties> 

     <dependencies> 
      <dependency> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
       <version>3.8.1</version> 
       <scope>test</scope> 
      </dependency> 

      <dependency> 
       <groupId>org.apache.poi</groupId> 
       <artifactId>poi</artifactId> 
       <version>3.7</version> 
      </dependency> 


      <dependency> 
       <groupId>org.apache.poi</groupId> 
       <artifactId>poi-ooxml</artifactId> 
       <version>3.13</version> 
      </dependency> 


      <dependency> 
       <groupId>stax</groupId> 
       <artifactId>stax-api</artifactId> 
       <version>1.0</version> 
      </dependency> 


     </dependencies> 
    </project> 

有人可以帮我解决这个问题。我搜索了关于这个错误 我发现的原因是缺少罐子但我已经检查过,罐子已经成功下载。

+0

请格式化你的问题,正确的代码,所以它是我们更容易阅读:) – James

+2

为什么要使用两种不同版本的POI(3.7和3.13)的?更好地匹配它们。 – Thilo

+0

我已经匹配POI的版本,它的工作...谢谢你@Thilo – Himanshi

回答

0

您正在使用不同版本的POI部分。你应该让它们匹配。

 <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi</artifactId> 
      <version>3.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi-ooxml</artifactId> 
      <version>3.13</version> 
     </dependency> 
相关问题