什么给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中检查图书馆。
- 右键单击您的项目 – >select属性
- selectJava构buildpath
- select标签对象和导出
- 然后select你添加的库。
- 好,然后再次运行您的项目。
当所有需要的poi jar文件都没有添加时,会发生这种情况。所以我的build议是添加所有需要的jar文件。 在lib和ooxml-lib文件夹中随同poi-3.15-beta2 jar文件一起添加jar文件。 如何添加jar
- 右键点击该项目
- 构buildpath> ConfigureBuildpath
- “库”选项卡
- 添加外部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不可用时,
检查下面的条件
- 检查
Jar file path
默认情况下,您添加了poi-ooxml-3.9-20121203.jar
-
检查是否需要额外的jar,在编译时,程序可能需要任何你没有导入的类文件
-
poi-3.7-jdk1.4-20110508-rc2
jar是必需的。
顾名思义,Java中的ClassNotFoundException
是java.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。
你会发现这些链接
- 阿帕奇
- 拿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所必需的。