Skip to content

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

@hbwhypw

Description

@hbwhypw

本地运行正常,部署到服务器异常。
本地win10,jdk 1.8,服务器是docker上的,open jdk 1.8

java.lang.NullPointerException: null
at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) ~[?:1.8.0_151]
at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219) ~[?:1.8.0_151]
at sun.awt.FontConfiguration.init(FontConfiguration.java:107) ~[?:1.8.0_151]
at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774) ~[?:1.8.0_151]
at sun.font.SunFontManager$2.run(SunFontManager.java:431) ~[?:1.8.0_151]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_151]
at sun.font.SunFontManager.(SunFontManager.java:376) ~[?:1.8.0_151]
at sun.awt.FcFontManager.(FcFontManager.java:35) ~[?:1.8.0_151]
at sun.awt.X11FontManager.(X11FontManager.java:57) ~[?:1.8.0_151]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_151]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_151]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_151]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_151]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_151]
at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83) ~[?:1.8.0_151]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_151]
at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) ~[?:1.8.0_151]
at java.awt.Font.getFont2D(Font.java:491) ~[?:1.8.0_151]
at java.awt.Font.canDisplayUpTo(Font.java:2060) ~[?:1.8.0_151]
at java.awt.font.TextLayout.singleFont(TextLayout.java:470) ~[?:1.8.0_151]
at java.awt.font.TextLayout.(TextLayout.java:531) ~[?:1.8.0_151]
at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:274) ~[poi-3.16.jar!/:3.16]
at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.(AutoSizeColumnTracker.java:117) ~[poi-ooxml-3.16.jar!/:3.16]
at org.apache.poi.xssf.streaming.SXSSFSheet.(SXSSFSheet.java:79) ~[poi-ooxml-3.16.jar!/:3.16]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:652) ~[poi-ooxml-3.16.jar!/:3.16]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:673) ~[poi-ooxml-3.16.jar!/:3.16]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:89) ~[poi-ooxml-3.16.jar!/:3.16]
at com.alibaba.excel.util.WorkBookUtil.createSheet(WorkBookUtil.java:51) ~[easyexcel-1.1.2-beta4.jar!/:?]
at com.alibaba.excel.context.WriteContext.currentSheet(WriteContext.java:112) ~[easyexcel-1.1.2-beta4.jar!/:?]
at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:69) ~[easyexcel-1.1.2-beta4.jar!/:?]
at com.alibaba.excel.ExcelWriter.write1(ExcelWriter.java:106) ~[easyexcel-1.1.2-beta4.jar!/:?]

Activity

whpat126

whpat126 commented on Dec 4, 2018

@whpat126

你的poi-ooxml和poi的版本好像有问题,标准是依赖3.17 你的依赖怎么是3.16?

Chat2DB-Pro

Chat2DB-Pro commented on Dec 7, 2018

@Chat2DB-Pro
Collaborator

jdk默认是没有安装字体的,这里有给解决方法:https://github.com/alibaba/easyexcel/blob/master/problem.md

li-keli

li-keli commented on Nov 15, 2019

@li-keli

@jipengfei-jpf 这个链接已经失效了

alibaba-easyexcel

alibaba-easyexcel commented on Nov 15, 2019

@alibaba-easyexcel
1471909065

1471909065 commented on Nov 26, 2020

@1471909065

其实能考虑下 内嵌一个字体不,或者 绕过这个 用通用的字体。 我在linux下 用其他的方式excel导出也能导出中文出来。 但是 easyexcel 在linux下要是缺少字体,那么导出来的就都是空的了。

aweo

aweo commented on Dec 28, 2020

@aweo

怎么绕过 这个坑;

aohanhongzhi

aohanhongzhi commented on Jan 14, 2021

@aohanhongzhi

我的解决方案是
【腾讯文档】easy-excel生成错误,字体导致
https://docs.qq.com/doc/DSE1HV2pTbmpTckFQ

Yuikij

Yuikij commented on Oct 27, 2021

@Yuikij

可以试试设置EasyExcel.write().inMemory(true)

ufoe

ufoe commented on Jun 16, 2022

@ufoe

可以试试设置EasyExcel.write().inMemory(true)

不行还是一样问题

orionmeetartemis

orionmeetartemis commented on Aug 11, 2022

@orionmeetartemis

可以试试设置EasyExcel.write().inMemory(true)

我这边是可以的,避免在系统层面安装依赖,非常感谢

bitbw

bitbw commented on Aug 27, 2022

@bitbw

Alpine Linux中OpenJDK无法使用字体控件fontconfig

解决方案

1) 将openjdk更换成oraclejdk。但考虑到商业授权的问题,因此不更换,仍使用openjdk。
2)再dockerfile构建文件中,安装 fontconfig 和 ttf-dejavu字体。

FROM openjdk:8-jre-alpine

# 安装 fontconfig 和 ttf-dejavu字体
RUN apk add fontconfig
RUN apk add --update ttf-dejavu
RUN fc-cache --force
renzhengzhi

renzhengzhi commented on Feb 19, 2024

@renzhengzhi

可以试试设置EasyExcel.write().inMemory(true)

这个方式可以解决字体问题。数据量大的时候不建议使用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @ufoe@aweo@hbwhypw@li-keli@renzhengzhi

        Issue actions

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