gpt4 book ai didi

java - Apache POI 写入 Excel 在 Eclipse 中有效,但在 OpenJDK 11 中编译为 Jar 后无效

转载 作者:行者123 更新时间:2023-12-01 18:32:16 25 4
gpt4 key购买 nike

我有一个项目,涉及使用 Apache POIs XSSFWorkbook() 类写入 Excel 电子表格 (.xlsx)。

它在 Java 8 的 Apache POI 的早期版本中运行良好。最近,我们将代码库迁移到 OpenJDK 11,并将 Apache POI 的 Maven 版本更新到 4.1.0,如常见问题解答 Apache POI FAQ 中指定的那样。 .

在 Eclipse 本身内,它能够按预期生成 excel 工作表到我的桌面(在 Win 7 计算机上)。但是做maven打包成jar文件后,jar版本不起作用。

我编译这个错误吗?下面的片段(不包含所有类,因为还有许多其他类从不同源读取数据)

private Workbook getWorkbook(String excelFilePath)
throws IOException, EncryptedDocumentException, InvalidFormatException {
Workbook workbook = null;

if (excelFilePath.endsWith("xlsx")) {
workbook = new XSSFWorkbook();
//} else if (excelFilePath.endsWith("xls")) {
//workbook = new HSSFWorkbook();
} else {
throw new IllegalArgumentException("The specified file is not Excel file");
}

return workbook;
}

public void writeReport(String excelFilePath) throws Exception {
workbook = getWorkbook(excelFilePath);
createHelper = workbook.getCreationHelper();

//Summary Sheet
TCOTSummarySheet summarySheet = new TCOTSummarySheet(workbook);
summarySheet.setProject(PROJECT);
summarySheet.setMaps(headerInfo, reportInfo, queryLinks);
summarySheet.createSheet();

//Bug Breakdown Sheet
if (bugBreakdownFlag) {
TCOTBugBreakdownSheet bugBreakdownSheet = new TCOTBugBreakdownSheet(workbook);
bugBreakdownSheet.setSummarySheet(summarySheet);
bugBreakdownSheet.setMaps(headerInfo, reportInfo, queryLinks);
bugBreakdownSheet.createSheet();
}


//Complete Write
try (FileOutputStream outputStream = new FileOutputStream(excelFilePath)) {
workbook.write(outputStream);
}
catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}
workbook.close();
}

编辑:

为了给总体项目提供更多背景信息,它是一个用 OpenJDK 11 编写的 JavaFX 项目。

此特定部分涉及运行从 JavaFX 执行的 Swing 应用程序。这个 Swing 应用程序实际上是使用 Apache POI 生成 Excel 报告的应用程序。这可能是由于线程问题造成的吗?

编辑2:添加了堆栈跟踪的图片 enter image description here

编辑3:我尝试将 javax 依赖项添加到我的 pom.xml 中,并尝试将它们添加为引用的外部库,但无济于事。

<!-- JAXB/Javax Dependencies -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/javax.activation-api -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>

我一直使用maven包进行编译。

最佳答案

问题是自定义运行时镜像不包含 jdk.charsets

使用 jlink 应用程序创建 apache poi 使​​用的运行时时,需要包含 jdk.charsets。

关于java - Apache POI 写入 Excel 在 Eclipse 中有效,但在 OpenJDK 11 中编译为 Jar 后无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60139889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com