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解压后各个目录的文件,分别拷贝至openjdk安装完之后的目录。比如 bin 目录下的文件为javafxpackager.exe和javapackager.exe,如下图:
将其拷贝至openjdk安装目录bin下,如下图:
5)同样将jre和lib目录下的文件均拷贝至openjdk对应目录即可。操作完成之后,这个openjdk就是包含openjfx的了,至此,让openjdk具有openjfx功能的操作即完成。
6)启动FineBI,查看之前报错的仪表板,显示正常即可。