服务器字体问题

服务器在windows下运行正常。

搬到Linux之后,注册页有个404???

HTTP Status 500 – Internal Server Error
Type 异常报告 消息 Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException 描述 服务器遇到一个意外的情况,阻止它完成请求。 Exception org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException

我看他说是调用错误, 我以为有什么异常没捕捉, 给错误位置 验证码实现类那里加了个catch 重新部署,, 错误依旧。。。。

然后翻tomcat日志, 翻自己日志, 仔细看了下有这么一段:

Root Cause

java.lang.NullPointerException
java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:362)
java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:307)
java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84)
java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
java.desktop/java.awt.Font.getFont2D(Font.java:497)
java.desktop/java.awt.Font$FontAccessImpl.getFont2D(Font.java:237)
java.desktop/sun.font.FontUtilities.getFont2D(FontUtilities.java:139)
java.desktop/sun.java2d.SunGraphics2D.checkFontInfo(SunGraphics2D.java:670)
java.desktop/sun.java2d.SunGraphics2D.getFontInfo(SunGraphics2D.java:831)
java.desktop/sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:46)
java.desktop/sun.java2d.pipe.ValidatePipe.drawString(ValidatePipe.java:165)
java.desktop/sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2929)
cn.yudie.blog.tool.VerificationCodeImpl.getVerificationCodeImg(VerificationCodeImpl.java:60)
cn.yudie.blog.web.CheckApi.checkCode(CheckApi.java:39)

就是说,从我调用验证码绘制开始,一直到 FontConfiguration类的 getVersion 才出现 异常??? 嗯 看了下那里的源码:

/**
* Returns a configuration specific path to be appended to the font
* search path.
*/
public String getExtraFontPath() {
return getString(head[INDEX_appendedfontpath]);
} public String getVersion() {
return getString(head[INDEX_version]);
}

看起来是和字体有关, 然后突然想起自己的 微软雅黑执念。。 在绘制之前,我设置的字体是

g.setFont(new Font("微软雅黑", Font.PLAIN, fontSize));

╮(╯▽╰)╭。。。 在linux上用微软的字体, 这不是开玩笑吗。懒得找字体,我想着用默认算了。。

new Font的构造是这么写的:

public Font(String name, int style, int size) {
this.name = (name != null) ? name : "Default";
this.style = (style & ~0x03) == 0 ? style : 0;
this.size = size;
this.pointSize = size;
}

看起来, 我给字体位置传个null 应该就用默认了, o( ̄▽ ̄)ブ 应该是这样 没错了。

然后重新打包, 部署。 注册页 刷新。。。!!! 错误依旧 (╯‵□′)╯︵┻━┻

最后,面向百度编程:

百度下也有别人遇到类似问题,根源问题就是JDK对字体的支持有问题, 要么处理字体, 要么更换JDK。

我选择了简单的 操作系统层面安装FontConfig组件

yum install fontconfig
fc-cache --force

安装需要root 权限, 安装好重启下tomcat就好了。

服务器字体导致NPE的更多相关文章

  1. CSS服务器字体

    1,首先要下载ttf文件 推荐下载网站:  https://www.dafont.com/ 2,写css样式 3,服务器字体 font-family:自己随便取个名字就行 注意url里的ttf文件和f ...

  2. 同时大量PPPoE连接请求,攻击PPPoE服务器,导致的用户异常掉线故障分析

    前几天接一个客户电话,PPPoE下用户异常掉线,掉线后拨号困难 到达后,我首先查看PPPoE日志,发现一秒钟内有大量PADI包,浪费服务器的SESSION,同时让服务器无法处理其他用户的请求. 打开W ...

  3. IIS优化服务器性能导致QuartZ任务未运行

    问题: IIS 为优化服务器性能,会自动对它认为休眠的应用程序进行资源回收,资源回收将会导致网站应用程序关闭. 解决方案: 1.  设置闲置超时为0,固定回收时间间隔为0,即IIS不主动回收闲置进程 ...

  4. 利用 force recovery 解决服务器 crash 导致 MySQL 重启失败的问题

    小明同学在本机上安装了 MySQL 5.7.17 配合项目进行开发,并且已经有了一部分重要数据.某天小明在开发的时候,需要出去一趟就直接把电脑关掉了,没有让 MySQL 正常关闭,重启 MySQL 的 ...

  5. MySQL Case--应用服务器性能瓶颈导致慢SQL

    在分析优化慢SQL时,除考虑慢SQL对应执行计划外,还需要考虑 1. 慢SQL发生时间点的数据库服务器性能 2.慢SQL发生时间点的应用程序服务器性能 3. 慢SQL发生时间点数据库服务器和应用服务器 ...

  6. Word 固定行间距公式图片显示不全、Word Eculid 字体导致行间距过大、Word 行间距过大

    1. 前言 1.有些文章行间距要求是固定值,比如,固定值15磅,但是这样会导致有些公式.图片显示不全.例如下图: 2.Euclid这个字体很容易导致行间距超大. 2. 解决方案 1.把固定值15磅改为 ...

  7. 记录一次更改服务器名称导致mysql 不能正常登录、启动

    由于客户要求更改服务器的名称,以便区分多台服务器:修改前mysql 能正常登录,但是修改后,登录时报错: Enter password: ERROR 1524 (HY000): Plugin '*C6 ...

  8. 解决开启服务器防火墙导致ftp不能连接的问题

    在防火墙设置的"高级"选项卡中的"网络连接设置"--"本地连接"--"设置"中添加了"FTP服务器" ...

  9. 数据库服务器改名导致Reporting Service不可用的案例

    案例环境: 操作系统版本    :    Windows Server 2012 R2 Standard 数据库版本      :   SQL Server 2012 Standard Edition ...

随机推荐

  1. 02.flask-script

    网址:https://pypi.org/project/Flask-Script/ 文档:https://flask-script.readthedocs.io/en/latest/ 1.安装 2.新 ...

  2. 18年第一弹射 和网络有关; 艾曲塞嗯诶系列篇 two

    35: 华为AR G3系列路由器可以通过FTP和TFTP更新系统文件,AR G3系列路由器可以作为FTP Client , FTP Server ,TFTP Client 36: 两台路由器间通过串口 ...

  3. 巨坑练习题!!!—— Car的旅行线路

    在看题目之前,请童鞋们做好心理准备╮(╯▽╰)╭ 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游. 她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之 ...

  4. 【WPF学习】第二十五章 日期控件

    WPF包含两个日期控件:Calender和DatePicker.这两个控件都被设计为允许用户选择日期. Calendar控件显示日期,在与Windows操作系统中看到的日历(例如,当配置系统日期时看到 ...

  5. java 排序算法分析

    一.冒泡排序(时间复杂度O(N^2)) public int[] bubbling(int[] arr){ ) return arr; ; i--){ 1 ; j < i-; j ++){ 2 ...

  6. java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"

    问题描述 今天在使用SpringBoot整合spring security,使用内存用户验证,但无响应报错:java.lang.IllegalArgumentException: There is n ...

  7. ArrayAccess 接口(源码)

    The ArrayAccess interface (PHP 5 >= 5.0.0, PHP 7) Introduction Interface to provide accessing obj ...

  8. OS课程 ucore_lab2实验报告

    练习零:填写已有实验    本实验依赖实验1.请把你做的实验1的代码填入本实验中代码中有"LAB1"的注释相应部分.提示:可采用diff和patch工具进行半自动的合并(merge ...

  9. Qt qApp

    qApp A global pointer referring to the unique application object. It is equivalent to the pointer re ...

  10. Codeforces_500_C

    http://codeforces.com/problemset/problem/500/C 数组从后向前代表当前书从上向下,当前位置只要向前找,找到当前位置的书,再将之间的重量加起来就可以了,相同的 ...