-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Description
本地运行正常,部署到服务器异常。
本地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 commentedon Dec 4, 2018
你的poi-ooxml和poi的版本好像有问题,标准是依赖3.17 你的依赖怎么是3.16?
Chat2DB-Pro commentedon Dec 7, 2018
jdk默认是没有安装字体的,这里有给解决方法:https://github.com/alibaba/easyexcel/blob/master/problem.md
li-keli commentedon Nov 15, 2019
@jipengfei-jpf 这个链接已经失效了
alibaba-easyexcel commentedon Nov 15, 2019
https://www.jianshu.com/p/c05b5fc71bd0
1471909065 commentedon Nov 26, 2020
其实能考虑下 内嵌一个字体不,或者 绕过这个 用通用的字体。 我在linux下 用其他的方式excel导出也能导出中文出来。 但是 easyexcel 在linux下要是缺少字体,那么导出来的就都是空的了。
aweo commentedon Dec 28, 2020
怎么绕过 这个坑;
aohanhongzhi commentedon Jan 14, 2021
我的解决方案是
【腾讯文档】easy-excel生成错误,字体导致
https://docs.qq.com/doc/DSE1HV2pTbmpTckFQ
Yuikij commentedon Oct 27, 2021
可以试试设置EasyExcel.write().inMemory(true)
ufoe commentedon Jun 16, 2022
不行还是一样问题
orionmeetartemis commentedon Aug 11, 2022
我这边是可以的,避免在系统层面安装依赖,非常感谢
bitbw commentedon Aug 27, 2022
Alpine Linux中OpenJDK无法使用字体控件fontconfig
解决方案
1) 将openjdk更换成oraclejdk。但考虑到商业授权的问题,因此不更换,仍使用openjdk。
2)再dockerfile构建文件中,安装 fontconfig 和 ttf-dejavu字体。
renzhengzhi commentedon Feb 19, 2024
这个方式可以解决字体问题。数据量大的时候不建议使用。