这两天用jrobin画图,发现中文标题一直显示不出来。java应用程序的中文会变成一个一个的“口”字.
产生这个问题的原因。java程序启动的时候会去在$JAVA_HOME/jre/lib/fonts目录下寻找相应的字体来显示。由于 JDK默认没有中文字体,所以我们需要手工的来设置一下,让java应用程序能够找到相应的中文字体。这样就能够解决问题了。
网传的办法:
基本步骤如下:
1)cd $JAVA_HOME/jre/lib/fonts
2)mkdir fallback
3)cp xxx.ttf fallback #xxx.ttf代表你想要的中文字体文件, 并设置文件可读
$sudo cp 字体路径/simhei.ttf fallback/
$sudo cp 字体路径 /simsun.ttc fallback/
$sudo chmod -R 644 fallback
4)cd fallback
5)mkfontscale
6)mkfontdir
这个时候就会在fallback目录下生成fonts.dir 和fonts.scale 文件,再将fonts.scale的内容追加到父目录的fonts.dir (如果不存在直接创建 touch ../fonts.dir ),
$cat fonts.scale >> ../fonts.dir
到这里应该就可以了,如果还不行的话fc-cache刷新一下字体缓存。
其实,我们可以一条命令解决这个问题。将Linux系统的字体目录作为JDK下面的一个字体目录连接。
ln -s $FONTS_PATH/FONT_DIR $JAVA_HOME/jre/lib/fonts/fallback
你在打开你的java应用程序就会看到久违的中文了。
在我的环境下:
vim /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/fontconfig.properties.src
(或者你的$JAVA_HOME下面)
# Version # Uses Fedora Core 6 fonts and file paths. version=1 # Component Font Mappings monospaced.plain.chinese-big5=AR PL ShanHeiSun Uni monospaced.plain.chinese-gb18030=AR PL ShanHeiSun Uni # Font File Names filename.AR_PL_ShanHeiSun_Uni=/usr/share/fonts/chinese/TrueType/uming.ttf filename.AR_PL_ZenKai_Uni=/usr/share/fonts/chinese/TrueType/ukai.ttf
然后ll /usr/share/fonts/chinese/TrueType/ukai.ttf
两个文件都不存在。
然后从网上下载了 uming.ttc和ukai.ttc,分别改后缀 ttc为ttf
然后重启tomcat
jrobin显示中文成功!!
总结~~
刚开始网上查找一通,由于各自环境和配置不一样,始终找不到答案。
然后沉下去看配置文件,终于自己发现了问题所在。
===========================================
另外,之前还遇到一个问题是:
jrobin 在生成图片时报Could not initialize class sun.awt.X11GraphicsEnvironment的异常,但在window下却又可显示的。
原因是没是加载java.awt.headless,于是修改${TOMCAT_HOME}/bin/catalina.sh
网上找解决方案:
一、查到-Djava.io.tmpdir="$CATALINA_TMPDIR"这行,并在这一行下加入:-Djava.awt.headless=true \共有七处的。修改好保存再重启即可
二、在catalina.sh里加上一句 “CATALINA_OPTS=-Djava.awt.headless=true”,问题解决。
set CATALINA_OPTS = " -Djava.awt.headless=true"
export CATALINA_OPTS