自从开始学习研究JPress博客之后一直蛮顺利,在阿里云上给学霸酱部署也比较成功。

 

今天尝试在群晖上部署JPress博客翻车了,大致流程如下:

 

在共享文件夹下新建jpress文件夹,上传打包好的Starter.zip,ssh登陆,运行,安装一气呵成。

 

刚兴冲冲的准备搬运几篇博客,发现管理后台的验证码无法展示,发现后台有NPE报错。

 

第一个想到的解决方法是换用Tomcat部署,打开套件中心,安装tomcat,一顿操作:运行,安装。

 

依然无法展示。这时候才想起看看报错信息,报错信息大致如下(没留下报错现场):

 


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.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    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.access$000(Font.java:224)
    at java.awt.Font$FontAccessImpl.getFont2D(Font.java:228)
    at sun.font.FontUtilities.getFont2D(FontUtilities.java:180)
    at sun.font.StandardGlyphVector.initFontData(StandardGlyphVector.java:1126)
    at sun.font.StandardGlyphVector.init(StandardGlyphVector.java:1115)

 

最后看到博客:https://blog.csdn.net/hongweigg/article/details/79867386  中提到非官方的Open JDK版本字库不全可能导致绘图报错的问题。

 

而群晖java套件正式OpenJDK的某个版本。 

 

再反过头来看JPress源码,JPress调用了JFinal封装好的captcha验证码功能。

 

而JFinal的 drawGraphic 方法中调用的是 SunGraphics2D 类进行绘图。

 

找到原因后怒换JDK,重新启动JPress,正常展示验证码并登陆。