我有一个用Java编写的应用程序,可以生成Excel表格。我是基于Apache POI的BigGridDemo示例来生成Excel(xlsx)文档。
hs_err_pid文件包含以下内容 -
实现的思路如下:
- 创建一个模板文档,包括工作表和全局对象例如单元格样式、数字格式等等
- 开发一个应用程序,将数据以文本文件的形式流式传输
- 使用生成的数据替换模板中的工作表
在Linux系统中,在第三步中,JVM会崩溃,并给出以下信息:
# A fatal error has been detected by the Java Runtime Environment:
# SIGSEGV (0xb) at pc=0x000000307a772c44, pid=11781, tid=1088649568
#
# JRE version: 6.0_24-b07
# Java VM: Java HotSpot(TM) 64-Bit Server VM (19.1-b02 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libc.so.6+0x72c44] memcpy+0x34
hs_err_pid文件包含以下内容 -
C [libc.so.6+0x72c44] memcpy+0x34
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j java.util.zip.ZipFile.getNextEntry(JI)J+0
j java.util.zip.ZipFile.access$400(JI)J+2
j java.util.zip.ZipFile$2.nextElement()Ljava/util/zip/ZipEntry;+54
j java.util.zip.ZipFile$2.nextElement()Ljava/lang/Object;+1
看起来这是在将模板工作簿读取为zip文件时发生的情况。以下是执行此操作的代码。
ZipFile zip = new ZipFile(zipfile);
ZipOutputStream zos = new ZipOutputStream(out);
Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zip.entries();
while (en.hasMoreElements()) {
ZipEntry ze = en.nextElement();
if(!ze.getName().equals(entry)){
zos.putNextEntry(new ZipEntry(ze.getName()));
InputStream is = zip.getInputStream(ze);
copyStream(is, zos);
is.close();
}
}
我该如何避免这种崩溃?