1. java.lang.NoClassDefFoundError: javafx/embed/swing/JFXPanel
問題現象:
預覽或者匯出大數據圖表時,儀表板頁面顯示無法存取,報錯如下:
Handler processing failed, nested exception is java.lang.NoClassDefFoundError: javafx/embed/swing/JFXPanel
報錯截圖:
查看後臺日誌(Web伺服器對應日誌,例如%tomcat%/logs/catalina.log),可以看到如下詳細日誌報錯:
原因分析:
FineBI5.1的很多功能都使用到了javafx,而一些openjdk中是不帶openjfx的。如果在這種openjdk下使用web容器部署FineBI5.1的話,圖表的大數據功能、匯出功能會受到影響無法使用,就會出現上述javafx相關報錯。
解決方案:
為不帶openjfx的openjdk新增該openjfx功能,下面我們以windows下的redhat openjdk為例,介紹下如何讓openjdk具有openjfx功能的操作步驟,操作前需要先關閉FineBI。
範例:
1)redhat openjdk是一種常見的openjdk,但是它並沒有包含openjfx。在此頁面下載redhat openjdk,安裝完成並配置好環境變數。
2)下載openjfx,此處直接提供windows、linux、macos三種系統使用的 openjfx 以供下載:
系統 | openjfx |
---|---|
windows | openjfx-8-sdk-overlay-win-x64.zip |
linux | openjfx-8u60-sdk-overlay-linux-amd64.zip |
macos | openjfx-8u60-sdk-overlay-osx-x64.zip |
3)解壓下載的openjfx檔案,Windows系統下的目錄結構如下所示:
4)將openjfx解壓後各個目錄的檔案,分別copy至openjdk安裝完之後的目錄。比如 bin 目錄下的檔案為javafxpackager.exe和javapackager.exe,如下圖:
將其copy至openjdk安裝目錄bin下,如下圖:
5)同樣將jre和lib目錄下的檔案均copy至openjdk對應目錄即可。操作完成之後,這個openjdk就是包含openjfx的了,至此,讓openjdk具有openjfx功能的操作即完成。
6)啟動FineBI,查看之前報錯的儀表板,顯示正常即可。