EasyExcel ——NullPointrtException:null at sun.awt.FontConfiguration

简介: EasyExcel 导出 Excel 文档,在开发机可以正常导出。上了测服之后,导出报空指针。

问题

EasyExcel 导出 Excel 文档,在开发机可以正常导出。上了测服之后,导出报空指针。

截屏2022-08-20 18.11.22.png


首先怀疑自己,但是又看见是 awt 报的空指针,懵逼了。

赶紧去 GitHub 看看有没有碰到相同问题的人。找到了一位和我情况一样的兄弟。原文如下


相同的代码,不同的结果。java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion() #157


原来是因为 JDK 里面缺少字体软件,所以报错。


开发机的 Docker 基础镜像是 FROM openjdk:8,而测试环境的是FROM openjdk:8-jdk-alpine ,而 alpine 是不带字体库。


瞬间明白了,为什么上了测服会报错。


解决方案

在参考了官方文档解决方案之后,我又按自己的需求做了尝试。

1.换基础镜像

这个最简单,但是我们其他服务在生产/测服都是 openjdk:8-jdk-alpine 。单独换镜像会出问题。为了 awt 就让镜像大很多也不太划算。


2.使用内存导出

EasyExcel.write(fileName, DemoData.class)
// 核心这个配置 开始内存处理模式        .inMemory(Boolean.TRUE)
        .sheet("模板")
        .doWrite(data());


加上 inMemory(Boolean.TRUE)就可以开启内存处理模式。避开 awt 。


不过官方提示了,1W 数据以内可以考虑,大了很容易OOM。遂只能放弃。


3.构建镜像的时候安装字体库

最后是采用安装字体库的方式解决的,只要在 Dockerfile 中加上

RUN  apk add ttf-dejavu

就可以在镜像中安装字体库了

目录
相关文章
|
5月前
|
消息中间件 SQL 关系型数据库
实时计算 Flink版操作报错之错误提示“null column 15 Encountered at line 43”如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
NoSQL Java Redis
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
springboot制作的登录拦截器出错:java.lang.StackOverflowError: null at javax.servlet.http.HttpServletRequestWra
springboot制作的登录拦截器出错:java.lang.StackOverflowError: null at javax.servlet.http.HttpServletRequestWra
143 0
|
消息中间件 PHP
laravel6 使用rabbitmq报错:Call to a member function make() on null at Queue\\Jobs\\Job.php:215
laravel6 使用rabbitmq报错:Call to a member function make() on null at Queue\\Jobs\\Job.php:215
173 0
Unable to handle kernel NULL pointer dereference at virtual address 00000000问题的解决
今天在编译好内核模块后,安装内核模块memdev.ko的时候,出现了Unable to handle kernel NULL pointer dereference at virtual address 00000000等如图所示的问题:     在百度和google找了很多答案,明显就是跟指针有关系。
3165 0
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 IS NULL
【8月更文挑战第12天】
591 0
在 MySQL 中使用 IS NULL
|
5月前
|
SQL 关系型数据库 MySQL
python在mysql中插入或者更新null空值
这段代码是Python操作MySQL数据库的示例。它执行SQL查询从表`a_kuakao_school`中选取`id`,`university_id`和`grade`,当`university_id`大于0时按升序排列。然后遍历结果,根据`row[4]`的值决定`grade`是否为`NULL`。若不为空,`grade`被格式化为字符串;否则,设为`NULL`。接着构造UPDATE语句更新`university`表中对应`id`的`grade`值,并提交事务。重要的是,字符串`NULL`不应加引号,否则更新会失败。
130 2
|
2月前
|
SQL 关系型数据库 MySQL
mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据
对于数据库开发的专业人士来说,理解NULL的特性并知道如何正确地在查询中处理它们是非常重要的。以上所介绍的技巧和实例可以帮助你更精准地执行数据库查询,并确保数据的完整性和准确性。在编写代码和设计数据库结构时,牢记这些细节将有助于你避免许多常见的错误,提高数据库应用的质量与性能。
50 0
下一篇
无影云桌面