我遇到以下问题。我正在解析一个大的 XML 文件(大约 100 MB) - 然后,在处理数据后,我将输出写入 XLS 文件。
处理是并行完成的(使用 ExecutorService),并且所有线程都写入同一个工作簿。
我得到的异常如下:
Caused by: java.lang.NullPointerException
at org.apache.poi.hssf.record.aggregates.RowRecordsAggregate.getEndRowNumberForBlock(RowRecordsAggregate.java:219)
at org.apache.poi.hssf.record.aggregates.RowRecordsAggregate.createIndexRecord(RowRecordsAggregate.java:469)
at org.apache.poi.hssf.model.InternalSheet.visitContainedRecords(InternalSheet.java:637)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWorkbook.java:1466)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1380)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1366)
at sample.Controller.buildSpreadsheet(Controller.java:295)
at sample.Controller.generateXLS(Controller.java:325)
... 58 more
问题是有时可以正常工作,但有时会因此错误而崩溃。
有什么想法吗?
最佳答案
Apache POI 不支持多个线程写入同一工作簿,因此这将失败,正如您所发现的
Apache POI 非常高兴地支持多个线程,所有线程都写入自己的工作簿
您需要重新设计您的逻辑,以便只有一个线程写入给定的工作簿,或者应用您自己的同步逻辑来防止多个线程同时写入
关于java - 写入 xls 文件时出错 - apache poi 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877296/