Font "微软雅黑" is not available to the JVM. See the Javadoc for more details.

Posted zhuqianchang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Font "微软雅黑" is not available to the JVM. See the Javadoc for more details.相关的知识,希望对你有一定的参考价值。

1. 背景

  在工作中使用JasperReport生成报表,会出现错误Font \\"微软雅黑\\" is not available to the JVM. See the Javadoc for more details.

2. 分析

  开发环境是window7,并没有出现该问题。测试环境是linux,出现该错误。根据错误的字面意思,初步设想是linux服务器上没有该字体。

3. 安装字体

  • 将window7上的中文字体安装到linux下
  • window7下字体所在位置:C:\\Windows\\Fonts。如下所示:

技术分享图片

  • 将简体中文字体复制到linux下,保存路径为:/usr/share/fonts/chinese/TrueType。如下所示,可视化工具为WinSCP:

技术分享图片

  • 使用命令安装字体:

  cd /usr/share/fonts/chinese/TrueType

  mkfontscale

  mkfontdir

  fc-cache –fv

  • 查看安装的字体:

  fc-list :lang-zh

 技术分享图片

  注意图中所选的字体微软雅黑,左边中中文表示,右边是英文表示

4. 再分析

  若重启服务后,问题已经解决,那么恭喜。但是我在实际情况下,很明确的linux下已经安装了字体,但还是提示错误。这很可能是环境不一样引起的问题,所以我想到了远程debug调试,远程调试配置:http://www.cnblogs.com/zhuqianchang/p/9044699.html

报错的位置在FontUtil.java350行,查看源码如下:

 技术分享图片

技术分享图片

技术分享图片

  根据源码分析,先获取系统的字体加入缓存,缓存是一个Set集合,然后判断指定字体是否在集合中。所以debug进去后,查看缓存中的字体,发现确实不存在字体“微软雅黑”,但是却发现了字体“Microsoft YaHei”。所以问题明确了,虽然安装了字体,但linux系统语言是英语,所以导致contains方法并不能匹配到字体“微软雅黑”,所以报错。

5. 修改系统语言

  • 查看当前语言

  echo $LANG

  • 修改语言

  vi /etc/sysconfig/i18n

  英文:LANG="en_US.UTF-8"

  中文:LANG="zh_CN.UTF-8"

  • 即时生效

  source /etc/sysconfig/i18n

6. 重启服务

  根据源码,系统字体保存在缓存中,所以需要重启服务。重启后,问题顺利解决

以上是关于Font "微软雅黑" is not available to the JVM. See the Javadoc for more details.的主要内容,如果未能解决你的问题,请参考以下文章

手机web字体css怎么设置微软雅黑

kindeditor编辑器微软雅黑样式font-family值变成"

python 字体染色

博客文字设置颜色,类别方法

VB.NET给程序添加微软雅黑字体提示Families[0]处0应为标识符,求解

css font-family常用的黑体宋体等字体中英文对照表