服务器字体问题

服务器在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. 动态规划 之 区间DP练习

    前言 \(Loj\) 放上了那么多<信息学奥赛一本通>上的题(虽然我并没有这本书),我要给它点一个大大的赞 ^_^ 以后分类刷题不愁啦! 正文 那就一道道说吧. 石子合并 将 \(n\) ...

  2. Browser Security-同源策略、伪URL的域

    同源策略 同源策略的文档模型 同源策略(Same Origin policy,SOP),也称为单源策略(Single Origin policy),它是一种用于Web浏览器编程语言(如JavaScri ...

  3. 废旧手机改造之给你的手机安装win10系统

    最近又开始琢磨把我这个即将退出的二手手机再利用一下 发现了一个不错的软件 先上图 是不是感觉逼格很高啊 点击下面链接即可下载使用 https://www.lanzous.com/i4gpsib 欢迎交 ...

  4. 《即时消息技术剖析与实战》学习笔记8——IM系统如何保证长连接的可用性:心跳机制

    假设有以下突发意外情况: 用户进入信号不好的地方,手机没有网络信号了 上网的路由器突然掉线了 这个时候,比如微信发消息,消息就会转圈圈,甚至变成红色叹号-- 上面情况都会导致"长连接&quo ...

  5. 异想家Win7系统安装的软件与配置

    C盘推荐一个硬盘,256G以上,安装好驱动,激活Win7,备份一次系统(纯净)! 1.Mac.Linux时间同步(双系统时配置): 开始->运行->CMD,打开命令行程序(以管理员方式打开 ...

  6. C语言的安装及使用

    安装 vc6.0 使用方法 new    ---  win32 Console Application ---  ok-ok     ------c++ Source File      ------ ...

  7. vscode python开发插件推荐

    vscode作为一款好用的轻量级代码编辑器,不仅支持代码调试,而且还有丰富的插件库,可以说是免费好用,对于初学者来说用来写写python是再合适不过了.下面就推荐几款个人觉得还不错的插件,希望可以帮助 ...

  8. Java爬虫框架之WebMagic

    一.介绍 WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 二.如何学习 1.查看官网 官网地址为:http://webmagic.io ...

  9. ubuntu系统下安装pip3及第三方库的安装

    ubuntu系统下会自带python2.x和python3.x坏境,不需要我们去安装.并且ubuntu系统下还会自动帮助我们安装python2.x坏境下的pip安装工具, 但是没有python3.x坏 ...

  10. FD_WRITE是如何触发的?

    The FD_WRITE network event is handled slightly differently. An FD_WRITE network event is recorded wh ...