服务器字体问题

服务器在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. 安装xpath helper

    1.下载 版本是:2.02的 链接:https://pan.baidu.com/s/1YdyTbWElL904EMQ-9Ougnw 提取码:bxxa 2.无效安装的解决方案 参考链接:https:// ...

  2. Flask蓝图(Blueprint)

    一.作用 1.目录结构划分 2.url添加前缀 url_prefix 3.应用特殊装饰器,在该蓝图定义的特殊装饰器,只在改蓝图的起效 二.简单示例 1.创建一个项目文件 2.创建一个同名的python ...

  3. python类型-字典

    字典是python语言中唯一的映射类型,映射对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系.一个字典对象是可变的,是一个容器类型,可存储任意个数的python对象,其中也可以包 ...

  4. 博客与微信小程序的同步

    在此之前,先说说自己最近的打算,才购买了阿里云的服务器,想做一个网站和图床网盘之类的方便自己使用. 考虑到小程序,又打算将自己的博客内容放到小程序中.从零开发实属困难,应该还要一段时间才能完成. 目前 ...

  5. Ubuntu下makefile的简单使用

    在Windows下,只需要简单的点击以下make,rebuild即可.而在Linux下,这样的IDE环境并没有提供,难道必须每一步都执行一遍吗?比较ok的做法自然是能够利用批处理脚本来进行操作了,这样 ...

  6. C#的JSON数据处理

    假设一个Model: public class Person { public int Age { get; set; } public string Name { get; set; } } JSO ...

  7. geojson转esriJson

    因为一些特殊需求,需要将geojson转为shp数据,网上有一些转换网站,但是存在一些问题,例如中文乱码.文件大小限制等等,折腾了一下,还是觉得用arcgis转比较好,因此先将geojson转为esr ...

  8. Git详解之内部原理

    前言 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认 ...

  9. Redis 通用方法 存储DataTable DataRow DataSet

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. 暑假第一周总结(在centos虚拟机上安装jdk以及hadoop并对hadoop进行配置)

    本周主要就是对虚拟机进行安装并在上边安装jdk以及hadoop并对其进行配置. 在看林子雨老师的教程时,下载了老师所给的全套的下载软件,在安装时发现老师所给的VirtualBox安装后无法正常启动,尝 ...