1. java.lang.NullPointerException
1.1 問題現象
儀表板組件匯出 Excel 後,開啟 Excel 報錯:errorCode:500, errorMsg: java.lang.NullPointerException,如下圖所示:
查看 FineBI 日誌%FineBI%/logs/fanruan.log,對應的報錯如下:
java.lang.NullPointerException
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:774)
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.FcFontManager.<init>(FcFontManager.java:35)
at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
at sun.reflect.GeneratedConstructorAccessor654.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
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 com.fr.third.v2.org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:254)
1.2 原因分析
該報錯是由於 Linux 系統沒有相關 font 資源導緻,需要為系統安裝字體管理器。
1.3 解決方案
在 Linux 中執行如下命令安裝字體管理:
yum install fontconfig
如果使用 docker 製作基礎鏡像運作以下命令:
RUN yum -y install fontconfig RUN fc-cache --forc
2. java.lang.IllegalArgumentException:The workbook already contains a sheet of this name
2.1 問題現象
匯出 Excel,開啟 Excel 報錯如下:
2.2 原因分析
Excel中 sheet 命名有如下規則:
1)sheet 名稱不能多於31個(包含英文、漢字、| 、()等,但是不能包含: 、/、?、*、[]等 ),程式中使用 poi 工具來生成的時候,傳進去大於 31 個長度的字串時,會被自動截取,便會導緻兩個名稱變為一樣的,出現sheet同名異常
2)sheet 名稱不能為空,為空也會報錯。
2.3 解決方案
修改組件名稱以及對應的長度,使其符合excel命名規則。
3. Could not initialize class sun.awt.X11GraphicsEnvironment
3.1 問題現象
Linux 環境下匯出 Excel 失敗,查看日誌或按 F12 進入控制檯,出現報錯:Could not initialize class sun.awt.X11GraphicsEnvironment
3.2 原因分析
在Linux下,儀表板匯出 Excel 時,會用到 Java 的圖片包來處理圖片。而 Java 虛擬機在處理圖片時需要本地的 x-server 支援,若是沒有就會出現該報錯。
3.3 解決方法
3.3.1 直接安裝的 FineBI
在路徑 %FineBI5.1%\bin 下找到finebi.vmoption檔案,在檔案內新增-Djava.awt.headless=true,儲存檔案。如下圖所示:
3.3.2 部署到 Tomcat 的 FineBI
進入%Tomcat%/bin目錄,找到並編輯配置檔案catalina.sh,增加-Djava.awt.headless=true參數,詳情請參見:匯出 Excel 設定。