Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
hbwhypw opened this issue Dec 4, 2018 · 12 comments

Comments

@hbwhypw
Copy link

hbwhypw commented Dec 4, 2018

本地运行正常,部署到服务器异常。
本地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!/:?]

@whpat126
Copy link

whpat126 commented Dec 4, 2018

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

@Chat2DB-Pro
Copy link
Collaborator

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

@li-keli
Copy link

li-keli commented Nov 15, 2019

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

@alibaba-easyexcel
Copy link

alibaba-easyexcel commented Nov 15, 2019

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

https://www.jianshu.com/p/c05b5fc71bd0

@1471909065
Copy link

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

@aweo
Copy link

aweo commented Dec 28, 2020

怎么绕过 这个坑;

@aohanhongzhi
Copy link

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

@Yuikij
Copy link

Yuikij commented Oct 27, 2021

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

@ufoe
Copy link

ufoe commented Jun 16, 2022

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

不行还是一样问题

@orionmeetartemis
Copy link

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

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

@bitbw
Copy link

bitbw commented Aug 27, 2022

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
Copy link

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests