服务器字体问题

服务器在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框架的简单使用 第一步:导入依赖 <dependencies> <dependency> <groupId>org.springframework ...

  2. QDialog

    QDialog设置setWindowFlags(Qt::FramelessWindowHint);后,dialog弹不出来,界面不显示: 在继承一个QDialog类并设置窗口为无边框时,如果调用set ...

  3. OpenCV里的颜色空间

    RGB三原色组合方式是最常用的 RGB色彩空间: R:红色分量 G:绿色分量 B:蓝色分量 HSV色彩空间: H - 色调(主波长). S - 饱和度(纯度/色调). V - 明度(强度). LAB色 ...

  4. Informatica在linux下安装搭建

    安装介质清单准备 介质名称 版本信息 描述 Informatica Powercenter 9.5.1 for Linux 64 bit 必须 Java Jdk 1.6.0_45 for Linux ...

  5. VS debug下为什么多此一举jmp函数地址?

    VS debug下为什么call 函数后,会jmp函数地址?多此一举? http://blog.csdn.net/viper/article/details/6332934 在写跑在main之前的时候 ...

  6. 文件(file 类)

    题目: 编写一个应用程序,输入一个目录和一个文件类型,显示该目录下符合该类型的所有文件.之后,将这些文件中的某一个文件剪切到另外一个目录中. 代码: File_Demo /** * 包含两个类,一个主 ...

  7. 从零开始学习redis源码

    2020的开年是比较艰难的,爆发了肺炎疫情,希望大家多注意安全,也希望疫情早日好转! 以3.2版本的源码为例,开始讲解,有时会贴出源码,进行说明,并会注明源码出处. 数据库 应该都知道默认redis会 ...

  8. Codeforces_818

    A.winners总数为(k+1)diplomas. #include<bits/stdc++.h> using namespace std; long long n,k; int mai ...

  9. ARTS Week 9

    Dec 23, 2019 ~ Dec 29, 2019 Algorithm Problem 69 Sqrt(x) 实现求解平方根函数Sqrt(x) 题目链接 题目描述:给定一个非负数x,求解该数字的平 ...

  10. 2019牛客多校2 F Partition problem(dfs)

    题意: n<=28个人,分成人数相同的两组,给你2*n*2*n的矩阵,如果(i,j)在不同的组里,竞争力增加v[i][j],问你怎么分配竞争力最 4s 思路: 枚举C(28,14)的状态,更新答 ...