记一次由oracle jdk 切换为open jdk引起的图形验证码报错

记一次由oracle jdk 切换为open jdk引起的图形验证码报错

一.背景及报错原因分析

因为oracle jdk1.8之后要开始收费了,公司不得已转入使用openJDK。

环境的主要区别是生产使用的是OpenJDK,而之前应用都是基于OracleJDK 1.8来做的,图片验证码使用awt来画的,使用OracleJDK 1.8显示正常。但是更换成OpenJDK1.8后,验证码无法显示,后台代码抛出异常:

java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion 

查阅相关资料发现

相对于oracle JDK来讲openJDK缺少了部分组件支持,并且重写了一些实现。在openJDK中,是不包含任何字体的,在生成图形验证码等使用awt.font的需求时,需要额外的字体支持。也就是说以前的oracle jdk是自带字体类库 ,而现在切换了openjdk没有了字体的类库,需要自己在系统层面上去引入字体库。搜索相关资料后发现可以通过在centos上安装fontconfig插件来引入字体类库。

另外,OpenJDK于2021年7月15日宣布解散AWT, 2D, Swing,和Sound这几个项目,也就是说以后的jdk版本就没有桌面应用的功能了,相关API不在维护。

二. fontconfig插件安装
1.centos插件准备

fontconfig和ttmkfdir可以在centos官网搜索下载

https://centos.pkgs.org/7/centos-x86_64/fontconfig-2.13.0-4.3.el7.i686.rpm.html

https://centos.pkgs.org/7/centos-x86_64/ttmkfdir-3.0.9-42.el7.x86_64.rpm.html

字体包fonts可以在自己本地电脑找: C:\Windows\Fonts

在这里插入图片描述

将下载好的fontconfig插件和ttmkfdir插件以及字体上传到/home/fontconfig下
在这里插入图片描述

2.安装插件
# 进入安装目录
cd /home/fontconfig
# 安装fontconfig
rpm -ivh fontconfig-2.13.0-4.3.el7.x86_64.rpm  --nodeps --force
# 安装ttmkfdir 
rpm -ivh ttmkfdir-3.0.9-42.el7.x86_64.rpm   --nodeps --force
# 执行ttmkfdir命令
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
# 创建字体目录/usr/share/fonts/
mkdir -p /usr/share/fonts/chinese
# 移动字体文件到/usr/share/fonts/chinese
mv fonts /usr/share/fonts/chinese
# 添加文件夹权限
chmod -R 755 /usr/share/fonts/chinese/fonts

在这里插入图片描述

3.字体文件路径配置
/usr/share/fonts/chinese/fonts
vi /etc/fonts/fonts.conf

在这里插入图片描述

4.刷新内存中的字体缓存,并查看加入的字体
# 刷新缓存
fc-cache
# 查看字体
fc-list

在这里插入图片描述

三.拓展阅读

相对于oracle JDK来讲openJDK缺少了部分组件支持,并且重写了一些实现。在openJDK中,是不包含任何字体的,在生成图形验证码等使用awt.font的需求时,需要额外的字体支持。目前版本的openjdk还由awt相关的api,之后就不在维护了。

另外,2021年7月15日OpenJDK管理委员会全票通过批准成立由Phil Race担任初始负责人的 Client Libraries Group(客户端类库工作组)。新的工作组将继续赞助OpenJFX[1]和Lanai[2]两个项目。同时批准 AWT, 2D, Swing,和Sound这几个项目解散。另外Harfbuzz[3]、Framebuffer Toolkit[4] 和XRender Pipeline[5] 这几个项目因失去赞助而解散。 AWT, 2D, Swing这几个是我们熟知的Java桌面端解决方案。这次Java社区正式宣布项目解散,标志着Java正式不再为这几个项目提供技术迭代支持。Java桌面端仅存OpenJFX一个项目,而这个项目一直不温不火。可以说目前Java在桌面端的地位已经几乎丧失。

OpenJFX 项目

OpenJFX 是一个开源的下一代客户端应用程序平台,是 JavaFX 的开源项目。由 OpenJDK 开源社区领导。适用于与 JDK 一起使用的桌面和嵌入式系统。其目标是为开发富客户端应用程序开发一个现代、高效且功能齐全的工具包。

OpenJDK管理委员会

该管理委员会负责OpenJDK社区的架构和运作。它负责修订OpenJDK社区的章程以完善现有流程、定义新流程并处理不再需要的流程,类似一个立法机构。

由5名贡献者组成:

  • 主席,由Oracle任命。
  • 副主席,由IBM任命,
  • OpenJDK Lead,由Oracle任命。
  • 两名普通成员,由提名选举产生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值