Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写入xls文件时出错-apache poi多线程_Java_Excel_Multithreading_Apache_Apache Poi - Fatal编程技术网

Java 写入xls文件时出错-apache poi多线程

Java 写入xls文件时出错-apache poi多线程,java,excel,multithreading,apache,apache-poi,Java,Excel,Multithreading,Apache,Apache Poi,我有以下问题。我正在解析一个大的XML文件(大约100MB),然后,在处理完数据后,我将输出写入一个XLS文件 处理是并行完成的(使用ExecutorService),所有线程都在写入同一工作簿 我得到的例外情况如下: Caused by: java.lang.NullPointerException at org.apache.poi.hssf.record.aggregates.RowRecordsAggregate.getEndRowNumberForBlock(RowRecordsAgg

我有以下问题。我正在解析一个大的XML文件(大约100MB),然后,在处理完数据后,我将输出写入一个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
问题是,有时工作没有任何问题,但有时会因为这个错误而崩溃


有什么想法吗?

NullPointerException
表示您尝试使用对象的成员/方法,该对象为
null
。这可能是由于空单元格造成的。你需要检查一下

RowRecordsAggregate.java:219

看看是什么引发了异常。例如,如果使用了
foo.bar
,但是
foo
null
,那么您需要如下内容:

if (foo == null) {
    foo = "";
}
//Do something with foo.bar

NullPointerException
表示您尝试使用对象的成员/方法,该对象为
null
。这可能是由于空单元格造成的。你需要检查一下

RowRecordsAggregate.java:219

看看是什么引发了异常。例如,如果使用了
foo.bar
,但是
foo
null
,那么您需要如下内容:

if (foo == null) {
    foo = "";
}
//Do something with foo.bar

ApachePOI不支持多线程写入同一工作簿,因此这将失败,正如您所发现的那样

ApachePOI非常高兴地支持多个线程,所有线程都写入自己的工作簿


您需要重新处理您的逻辑,以便只有一个线程写入给定工作簿,或者应用您自己的同步逻辑来防止多个线程同时写入

Apache POI不支持多个线程写入同一工作簿,因此这将失败,正如您所发现的那样

ApachePOI非常高兴地支持多个线程,所有线程都写入自己的工作簿


您需要重新处理逻辑,以便只有一个线程写入给定工作簿,或者,您可以应用自己的同步逻辑来防止多个线程同时写入

excel工作表中的空单元格?有关代码和其他内容的详细信息将非常有用。excel工作表中的空单元格?有关代码和其他内容的详细信息将非常有用。感谢答案。我将重新处理应用程序的逻辑,只使用一个线程。谢谢您的回答。我将重新处理应用程序的逻辑,以便只使用一个线程。