最近項目遇到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找不到字體文件

2

3

4

5

6

7

8

9

10

二、問題解決:
寫一個測試系統環境的小程序
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

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

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

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

修改后的詞部分內容與原文件內容不一致,注意修改此處
最后值得注意的是在font.properties.zh內容的結尾加上
1
appendedfontpath=/usr/lib/X11/fonts/truetype
