什么给java.lang.NoClassDefFoundError?

我想阅读excel文件,但给

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObject at ExcelReader.main(ExcelReader.java:32) Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlObject 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 java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 more 

请帮帮我。 首先打开.xlsx文件,然后给第一个工作表。 在控制台上打印excel文件的数据。 Ps:我添加poi-ooxml-3.9-20121203.jar到我的项目。

  import java.io.File; import java.io.FileInputStream; import javax.swing.text.html.HTMLDocument.Iterator; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import java.util.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** * @author mohammad hosein * */ public class ExcelReader { /** * @param args */ public static void main(String[] args) { try { FileInputStream file = new FileInputStream(new File("E:\\test.xlsx")); //Get the workbook instance for XLS file XSSFWorkbook workbook = new XSSFWorkbook (file); //Get first sheet from the workbook XSSFSheet sheet = workbook.getSheetAt(0); //Get iterator to all the rows in current sheet java.util.Iterator<Row> rowIterator = sheet.iterator(); while(rowIterator.hasNext()) { Row row = rowIterator.next(); java.util.Iterator<Cell> cellIterator = row.cellIterator(); while(cellIterator.hasNext()) { Cell cell = cellIterator.next(); System.out.print(cell.getStringCellValue() + "\t"); } System.out.println(""); } } catch(Exception e) { System.out.println("EROR!"); } //Get iterator to all cells of current row } 

}

你的代码是不相关的。 当在编译时可用的类在运行时不可用时,会发生NoClassDefFoundError 。 如果你提供了一个完整的堆栈跟踪,以及没有find的类的实际名称,可以给出更精确的build议。

通常情况下,当您使用与用于构build代码的版本不同的JAR版本运行代码时,会发生这种情况。 stream氓JAR可能来自应用程序容器或类似应用程序,并且放置在比正确JAR更早的类path中。

更新

鉴于您添加的堆栈跟踪,您缺乏Apache POI的传递依赖关系:XMLBeans。 您可能在运行时错过了这个JAR。 这一切都取决于你如何正在运行你的项目。

我想你忘了在Project's Property中检查图书馆。

  1. 右键单击您的项目 – >select属性
  2. selectJava构buildpath
  3. select标签对象和导出
  4. 然后select你添加的库。
  5. 好,然后再次运行您的项目。

当所有需要的poi jar文件都没有添加时,会发生这种情况。所以我的build议是添加所有需要的jar文件。 在lib和ooxml-lib文件夹中随同poi-3.15-beta2 jar文件一起添加jar文件。 如何添加jar

  1. 右键点击该项目
  2. 构buildpath> ConfigureBuildpath
  3. “库”选项卡
  4. 添加外部jar文件

Apache POI文档提供了不同组件及其依赖项的完整列表 。 你声明你想使用poi-ooxml但是你似乎错过了xmlbeans依赖(也许还有其他的!)。 查看组件页面 ,了解所有需求的全部细节。

如果您下载了Apache POI的二进制版本 ,那么您将发现您可能需要的所有依赖项。 只需添加你需要的。

如果所有这些手册内容对您来说都有些困难,请使用Apache Maven或Apache Ivy等来pipe理您的依赖关系。

接下来,你需要所有可用的jar子两次。 一次编译,一次运行。 只是在日蚀或类似的jar子可能是不够的,你也需要把它们放到你的生产环境!

确保你的库中已经添加了“commons-collections.jar”文件,否则从这里下载所有的库文件:

http://www-us.apache.org/dist/poi/release/bin/poi-bin-3.16-20170419.zip

在zip文件中打开“lib”文件夹下载后,您会发现需要添加到项目库中的common-collectins.jar文件,如附图所示:

图片显示了所有必要的库

NoClassDefFoundError将在编译期间出现,但在运行时在java classpath中不可用。 通常情况下,当你得到NoClassDefFoundError时你会在日志中看到下面的行:

这个网站给你所有的原因,为什么你得到这个错误3种方式如何解决它

一般来说NoClassDefFoundError exception会发生,当所需的jar不可用时,

检查下面的条件

  1. 检查Jar file path默认情况下,您添加了poi-ooxml-3.9-20121203.jar
  2. 检查是否需要额外的jar,在编译时,程序可能需要任何你没有导入的类文件

  3. poi-3.7-jdk1.4-20110508-rc2 jar是必需的。

顾名思义,Java中的ClassNotFoundExceptionjava.lang.Exception一个子类,当Java虚拟机试图加载一个特定的类并且在classpath中没有find所请求的类时就会出现。

关于这个exception的另一个重要的一点是,它是一个检查exception ,你需要明确地提供exception处理,而使用方法可能会抛出ClassNotFoundException在java中通过使用try-catch块或通过使用throws子句。

Oracle文档

 public class ClassNotFoundException extends ReflectiveOperationException 

在应用程序尝试使用以下命令通过其string名称加载类时抛出:

  • 类Class中的forName方法。
  • 类ClassLoader中的findSystemClass方法。
  • 类ClassLoader中的loadClass方法。

但没有find具有指定名称的类的定义。

poi-ooxml-schemas-3.9-20121203.jar文件添加到类path以避免exception。
你会发现这些链接

  1. 阿帕奇
  2. 拿jar子

编辑

你错过了POI附带的额外的jar文件。 将他们包括在你的课程path中。
你需要在这里包含一个名为xmlbeans-xxxjar的jar文件。
XMLBeans的

有2个重要的jar文件与poi-3.9一起使用,需要包含在XSSFWorkbook中使用它们

xmlbeans * .jar dom4j – *。jar

这两个jar子都存在于ooxml-lib文件夹中,是poi-3.9 * .zip的一部分。 将它们包括在您的图书馆,并应该解决这个问题。

我只是有同样的问题。 我已经通过将整个文件夹添加到库(使用Netbeans)在\ ooxml-lib \文件夹中添加了JAR。 我删除了这个并手动添加每一个,它的工作。

在您的构buildpath中添加xmlbeans-2.3.0.jar。它是xlsx所必需的。