一、问题场景
开发环境:windows+openjdk11
在开发中需要用到字体类,获取字体的宽高等参数,代码如下:
Font font = new Font("Fixedsys", Font.CENTER_BASELINE, FONT_SIZE);
FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true);
Rectangle rec = font.getStringBounds("a", frc).getBounds();
在开发环境下运行正常,没有任何问题。
但是把jar包放到linux环境中运行时,发现接口报错。
但也并非所有的linux环境都会报错。
二、问题排查
后来查看日志,发现是NPE异常:
打印font对象也是NPE:
三、问题解决
由于OpenJDK相比于OracleJDK,对某些部分作了简化,所以简化这部分就依赖于环境中的配置,在某些环境下,这些配置是有的,所以也能正常运行,但对于某些环境,缺失这部分配置,而jdk里面也没有,所以导致NPE。
解决办法:
1、在环境中增加配置:
yum install -y fontconfig
安装完成后问题解决。
2、将OpenJDK换成OracleJDK。换开发环境比较麻烦,而且如果是商用的话注意OracleJDK的版本(Oracle JDK 8u211及以上版本商用收费)。