服务器字体问题

服务器在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. SpringMVC简单使用教程

    一.SpringMVC简单入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...

  2. 【转载】Notepad++源码分析

    在网上发现了一个哥们写了关于Notepad++源码的文章,不过就写了一就没有了,我就接着他的工作再说说吧! 大三了,也写了一点儿程序了,但是如果只是按照自己的思路写下去恐怕难以提高,于是准备开始阅读一 ...

  3. 对于kvm配置ssh

    首先我们要让自己的机器开启ssh服务 首先更新源 sudo apt-get update 安装ssh服务 sudo apt-get install openssh-server 检测是否已启动 ps ...

  4. python读取txt打印(print)出乱码的问题

    如下图所示,print第一行首位出现乱码的问题 网上的解答是因为UTF-8的BOM前缀(\xef\xbb\xbf) 解决这个问题的方法很多,最快捷的方法是txt文本另存为的时候更改编码格式 将txt另 ...

  5. if continue的用法(跳过本次循环,执行下一个循环)

    Python continue 语句跳出本次循环 当需要跳过本次循环的时候,使用continue能跳过本次循环,直接下一个循环 如下脚本: for url in alllink: if url == ...

  6. 数据库及ORM之Mysql

    1. 数据库介绍 1.1什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可 ...

  7. Linux内核单链表

    主要说明Linux内核中单链表操作的关键思想,需要注意的地方 1. 假设 为了说明关键思想,对数据结构进行了精简 2. 数据结构定义 struct ListNode { int val; ListNo ...

  8. Codeforces_451_B

    http://codeforces.com/problemset/problem/451/B 取前后第一个不满足条件的位置,逆序,判断. #include<cstdio> #include ...

  9. go接口详解

    go面向接口编程知识点 接口定义与格式 隐式实现及实现条件 接口赋值 空接口 接口嵌套 类型断言 多态 接口定义与格式 接口(interface)是一种类型,用来定义行为(方法).这句话有两个重点,类 ...

  10. Java7循环结构综合练习

    import java.util.Scanner; public class jh_01_学员操作_选择游戏 { public static void main(String[] args) { Sc ...