acerbic coffee
走自己的路,让别人跑步
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 26,comments - 14,trackbacks - 0
<
2014年2月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
个人笔记(18)
随笔档案
2009年9月 (1)
2009年7月 (2)
2008年7月 (1)
2008年6月 (2)
2008年5月 (2)
2007年9月 (1)
2007年8月 (1)
2007年5月 (1)
2007年4月 (5)
2007年3月 (1)
2006年11月 (4)
2006年10月 (8)
文章分类
articles(5)
个人记录(9)
文章档案
2013年3月 (1)
2009年7月 (1)
2009年6月 (1)
2007年2月 (1)
2006年11月 (6)
2006年10月 (8)
收藏夹
bank(4)
html学习+经典(4)
javascript(7)
java学习(10)
ruby(3)
框架(struts+jsf+spring...)(4)
ajax中国(ajax开发)
ajax开发简略
其他
下载
孙维琴个人网站
搜索
积分与排名
积分 - 46647
排名 - 1033
最新评论
1. re: JFreeChart在linux端图片显示乱码问题解决
楼上绝对正解
--haer
2. re: JFreeChart在linux端图片显示乱码问题解决
是的@刘鑫
--zzs
3. re: JFreeChart在linux端图片显示乱码问题解决
绝对正解 @liuyang
--bincrack
4. re: JFreeChart在linux端图片显示乱码问题解决[未登录]
楼上正解,感谢!
--liuyang
5. re: tomcat启动加载xml文件的配置在什么地方?
要在host 节点配置
--hout
阅读排行榜
1. 无意中查sql中as的用法搜索到的一些经典的sql语句(6917)
2. JFreeChart在linux端图片显示乱码问题解决(4009)
3. MyEclipse快捷键与插件大全(3956)
4. tomcat启动加载xml文件的配置在什么地方?(2059)
5. tomcat服务器配置chm.rar等文件下载!(1754)
评论排行榜
1. JFreeChart在linux端图片显示乱码问题解决(5)
2. 学习struts有那么难么?(5)
3. 今天自己做得一个js动态改变图片的程序!!(1)
4. 无意中查sql中as的用法搜索到的一些经典的sql语句(1)
5. tomcat启动加载xml文件的配置在什么地方?(1)
JFreeChart在linux端图片显示乱码问题解决
最近项目遇到linux上显示JFreeChart图形,在网上搜索到了很多关于此方面的信息,详细的也有,不过大多环境都是redhat+jdk1.4但乍一看说得不太清楚,搞了半天终于搞定了,现解释,
环境:suse10,jdk1.4.2
相同部分就不再多说,以下部分内容,挑csdn上一个详细的文章粘贴出来,顺便总结一下
一、 错误描述
基本上的错误都是以下错误
1
java.lang.InternalError: Can
'
t connect to X11 window server using
'
:
0.0
'
as the value of the DISPLAY variable.
2
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
3
at sun.awt.X11GraphicsEnvironment.
<
clinit
>
(X11GraphicsEnvironment.java:
125
)
4
at java.lang.Class.forName0(Native Method)
5
at java.lang.Class.forName(Class.java:
140
)
6
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:
62
)
7
at java.awt.Font.initializeFont(Font.java:
309
)
8
at java.awt.Font.
<
init
>
(Font.java:
345
)
9
at org.jfree.chart.plot.PiePlot.
<
clinit
>
(PiePlot.java:
186
)
10
at org.jfree.chart.ChartFactory.createPieChart3D(ChartFactory.java:
416
)
错误原因么,大概就是jvm找不到字体文件
二、问题解决:
写一个测试系统环境的小程序
1
public
class
PrintLocale
{
2
public
static
void
main(String[] args)
{
3
System.out.println(System.getProperty(
"
user.language
"
));
4
System.out.println(System.getProperty(
"
user.region
"
));
5
System.out.println(System.getProperty(
"
file.encoding
"
));
6
System.out.println(System.getProperty(
"
os.version
"
));
7
}
8
}
9
例如输入结果:
zh
CN
GB2312
2.4.19-4GB
对于我们来说关注的地方其实只有第一行“zh”,说明目前环境是简体中文,
从Sun的文档"Adding Fonts to the Java Runtime"[参见参考文献1]中,我们可以得知: 在英文环境下,字体属性由无后缀的font.properties 定义。为了一些操作系统的特殊问题,字体属性文件的名字可以加入操作系统的版本号作为后缀。例如,Solaris 2.5.1 不支持 TrueType 字体,所以字体属性文件font.properties.5.5.1 将只包含 F3 字体。在大多数操作系统中,版本后缀的值由System.getProperty("os.version")来确定。
如果环境是日文、韩文、简体中文或繁体中文,就必须使用相应于特定环境的 font.properties 文件。这些文件可以通过文件名后边加上相应的国家或者locale后缀识别,格式为font.properties.<locale>。该<locale>实际上由<language>_<region>_<encoding>三部分构成。而<language>、<region>和<encoding>分别对应了系统属性(由System.getProperty方法返回的字符串)"user.language"、"user.region"和"file.encoding"。而这个font.properties.<locale>名也可以跟操作系统的版本结合使用。
概括的讲,Java按照以下顺序搜索字体属性文件:
1
font.properties.
<
language
>
_
<
region
>
_
<
encoding
>
.
<
osVersion
>
2
font.properties.
<
language
>
_
<
region
>
_
<
encoding
>
3
font.properties.
<
language
>
_
<
region
>
.
<
osVersion
>
4
font.properties.
<
language
>
_
<
region
>
5
font.properties.
<
language
>
_
<
encoding
>
.
<
osVersion
>
6
font.properties.
<
language
>
_
<
encoding
>
7
font.properties.
<
language
>
_
<
osVersion
>
8
font.properties.
<
language
>
9
font.properties.
<
encoding
>
.
<
osVersion
>
10
font.properties.
<
encoding
>
11
font.properties.
<
osVersion
>
12
font.properties
13
所以我们需要检查%JAVA_HOME%/jre/lib/fonts目录下是否存在font.properties.zh文件,如果没有则新建一个,或者copy font.properties
1
cp font.properties font.properties.zh
三、检查
很多人介绍的都是copy或引用/usr/share/fonts/zh_CN/TrueType目录下的中文字体
但是有些suse上不存在/usr/share/fonts这个目录,所以有时候会叫人感觉很头疼,但是仔细检查你会发现路经/usr/lib/X11/font/truetype存在,所以并不一定要/usr/share/fonts/zh_CN/TrueType这个文件夹
用vi打开/usr/lib/X11/font/truetype/fonts.dir文件,
搜索gbk或gb2312(一个人需要而定),将其中的一个拷贝出来此处,我们搜索gb18030,在font.dir中找到
-misc-ZYSong18030-medium-r-normal--0-0-0-0-c-0-iso10646-1
按照 java 的字体规则改为 -misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
我们选用字体 -misc-ZYSong18030-medium-r-normal--0-0-0-0-c-0-iso10646-1 是因为在 redhat 7.3 和 redhat 8.0 上都能用
打开font.properties.zh,将里面内容替换如下:
1
# @(#)font.properties.zh.Redhat.linux 1.4 02/06/10
2
#
3
# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
4
#
5
6
# Component Font Mappings
7
#
8
serif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
9
10
serif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
11
12
serif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
13
14
serif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
15
16
sansserif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
17
18
sansserif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
19
20
sansserif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
21
22
sansserif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
23
24
monospaced.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
25
26
monospaced.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
27
28
monospaced.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
29
30
monospaced.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
31
32
dialog.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
33
34
35
dialog.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
36
37
dialog.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
38
39
dialog.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
40
41
dialoginput.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
42
43
dialoginput.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
44
45
dialoginput.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
46
47
dialoginput.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
48
# Missing Glyph Character
49
#
50
default.char=274f
51
52
# Component Font Character Encodings
53
#
54
fontcharset.serif.0=sun.io.CharToByteISO8859_1
55
fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK
56
57
fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
58
fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK
59
60
fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
61
fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK
62
63
fontcharset.dialog.0=sun.io.CharToByteISO8859_1
64
fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK
65
66
fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
67
fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK
68
69
# Exclusion Ranges
70
#
71
72
# XFontSet Information
73
#
74
fontset.serif.plain=\
75
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
76
77
fontset.serif.italic=\
78
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
79
80
fontset.serif.bold=\
81
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
82
83
fontset.serif.bolditalic=\
84
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
85
86
fontset.sansserif.plain=\
87
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
88
89
fontset.sansserif.italic=\
90
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
91
92
fontset.sansserif.bold=\
93
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
94
95
fontset.sansserif.bolditalic=\
96
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
97
98
fontset.monospaced.plain=\
99
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
100
101
fontset.monospaced.italic=\
102
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
103
104
fontset.monospaced.bold=\
105
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
106
107
fontset.monospaced.bolditalic=\
108
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
109
110
fontset.dialog.italic=\
111
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
112
113
fontset.dialog.bold=\
114
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
115
116
fontset.dialog.bolditalic=\
117
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
118
119
fontset.dialog.plain=\
120
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
121
122
fontset.dialoginput.italic=\
123
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
124
125
fontset.dialoginput.bold=\
126
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
127
128
fontset.dialoginput.bolditalic=\
129
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
130
131
fontset.dialoginput.plain=\
132
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
133
134
#fontset.default=\
135
#-b
&h-lucida-medium-r-normal-sans-
*-%d-*-*-p-*-iso10646-1,\
136
#-tlc-song-medium-r-normal--*-%d-*-*-c-*-gbk-0
137
138
fontset.default=\
139
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
140
141
仔细观察你可以发现替换的内容基本都是".0"的内容
特别要注意
1
# Missing Glyph Character
2
#
3
default.char=274f
4
5
# Component Font Character Encodings
6
#
7
fontcharset.serif.0=sun.io.CharToByteISO8859_1
8
fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK
9
10
fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
11
fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK
12
13
fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
14
fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK
15
16
fontcharset.dialog.0=sun.io.CharToByteISO8859_1
17
fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK
18
19
fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
20
fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK
21
22
# Exclusion Ranges
23
#
24
25
# XFontSet Information
26
#
27
28
修改后的词部分内容与原文件内容不一致,注意修改此处
最后值得注意的是在font.properties.zh内容的结尾加上
1
appendedfontpath=/usr/lib/X11/fonts/truetype
这是为了让jvm去寻找字体文件
你也可以将环境变量export JAVA_FONTS=/usr/lib/X11/fonts/truetype假如系统或你的账号启动sh的.profile里
至此中文问题配置完毕
四、其他问题,
如果使用tomcat 设置环境变量:
CATALINA_OPTS="-Djava.awt.headless=true"
export CATALINA_OPTS
(如果你想每次开机自动生效,则可把这两句写入系统或者你的账号启动sh的.profile里)
到此关于linux显示jfreechart图像显示乱码的环境配置问题既可以得到解决,其余基本就是代码的问题,可仔细检查jfreechat文档,
jfreechart关注点:
设置Legend的font
x轴坐标名称的font
y轴坐标名称的font
posted on 2008-07-01 18:46
acerbic coffee
阅读(4009)
评论(5)
编辑
收藏
所属分类:
个人笔记
FeedBack:
#
re: JFreeChart在linux端图片显示乱码问题解决
2008-12-25 10:19 |
刘鑫
其实根本没有那么麻烦
直接天网ftp搜索下载simsun.ttf
然后在jre/lib/fonts下面新建fallback文件夹,将simsun.ttf放入即可
回复
更多评论
#
re: JFreeChart在linux端图片显示乱码问题解决[未登录]
2010-09-16 13:57 |
liuyang
楼上正解,感谢!
回复
更多评论
#
re: JFreeChart在linux端图片显示乱码问题解决
2012-06-18 18:43 |
bincrack
绝对正解 @liuyang
回复
更多评论
#
re: JFreeChart在linux端图片显示乱码问题解决
2013-10-16 13:37 |
zzs
是的@刘鑫
回复
更多评论
#
re: JFreeChart在linux端图片显示乱码问题解决
2014-02-28 10:51 |
haer
楼上绝对正解
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
JFreeChart在linux端图片显示乱码问题解决
(转载)XSLT分页显示XML数据并对所有数据重新排序
知道得越多,不知道得也就越多
很久不来了!
jfreeChart Api 简要介绍
叫人郁闷的chm文件打开
一罐啤酒,一碗泡面,一盒香烟,一个夜晚.......
墨迹!
千金难买!
南京之旅!