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

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

目录
相关文章
|
2月前
|
Dubbo Java 应用服务中间件
Serialized class org.apache.catalina.core.ApplicationPart must implement java.io.Serializable
Serialized class org.apache.catalina.core.ApplicationPart must implement java.io.Serializable
49 0
|
3月前
|
Java Maven
java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator
java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator
22 1
|
6月前
|
Java
【Java异常】Error:(30, 62) java: 程序包com.sun.org.apache.xerces.internal.impl.dv.util不存在
【Java异常】Error:(30, 62) java: 程序包com.sun.org.apache.xerces.internal.impl.dv.util不存在
551 0
|
6月前
|
缓存 Java Spring
【异常】com.alicp.jetcache.support.CacheEncodeException: Java Encode error.
【异常】com.alicp.jetcache.support.CacheEncodeException: Java Encode error.
89 0
|
4月前
|
Java 应用服务中间件 Apache
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
65 0
|
5月前
|
Java
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
|
Java
SpingBoot2.x文件上传:failed to convert java.lang.String to org.springframework.util.unit.DataSize
SpingBoot2.x文件上传:failed to convert java.lang.String to org.springframework.util.unit.DataSize
338 0
java.lang.ClassNotFoundException: org.apache.commons.fileupload.disk.DiskFileItemFactory
您好,我是码农飞哥,感谢您阅读本文!本文主要介绍文件上传报的错
120 0
|
Java
Exception in thread “main“ java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibilit
Exception in thread “main“ java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibilit
99 0
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found
91 0