解决导出excel时FontConfiguration报空指针异常

文章讲述了在使用ApachePOI进行Excel导出时遇到FontConfiguration空指针异常的问题,原因在于服务器缺少字体库。解决方法是将SXSSFWorkbook替换为XSSFWorkbook,确保Workbook接口的正确实现。作者还提供了修复后的代码示例。
摘要由CSDN通过智能技术生成

解决导出时FontConfiguration报空指针异常.
报错信息如下:

java.lang.NullPointerException: null
        at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
        at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
        at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
        at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:776)
        at sun.font.SunFontManager$2.run(SunFontManager.java:431)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.<init>(SunFontManager.java:376)
        at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at java.lang.Class.newInstance(Class.java:442)
        at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
        at java.awt.Font.getFont2D(Font.java:491)
        at java.awt.Font.canDisplayUpTo(Font.java:2060)
        at java.awt.font.TextLayout.singleFont(TextLayout.java:470)
        at java.awt.font.TextLayout.<init>(TextLayout.java:531)
        at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:275)
        at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117)
        at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:82)
        at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:658)
        at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:679)
        at com.cgnpc.ssc.datastatisticsserver.framework.utils.PoiUtils.writeExcelSheets(PoiUtils.java:167)
        at com.cgnpc.ssc.datastatisticsserver.framework.utils.PoiUtils.exportSXSSF(PoiUtils.java:143)

报错原因是:
导出文件使用的是org.apache.poi.xssf.streaming下的SXSSFWorkbook,提示服务器字体库丢失文件。
在这里插入图片描述

解决方案:
换成了org.apache.poi.xssf.usermodel下的XSSFWorkbook,这样就可以导出了。
在这里插入图片描述

这两个类都实现了都是实现了Workbook接口,以上问题就解决了,下面附赠导出后续代码

XSSFWorkbook wb = ExcelUtils.writeExcel(sheetName, title, content, col, data);
        OutputStream os = null;
        try {
            HttpServletResponse response = HttpServlet.getResponse();
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            //前端好像获取不到filename
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
            os = response.getOutputStream();
            wb.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            LogUtils.error(e.getMessage());
        } finally {
            if (os != null) {
                os.flush();
                os.close();
            }
        }
  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值