acerbic coffee
          走自己的路,讓別人跑步
          posts - 26,comments - 14,trackbacks - 0

                  最近項目遇到linux上顯示JFreeChart圖形,在網上搜索到了很多關于此方面的信息,詳細的也有,不過大多環境都是redhat+jdk1.4但乍一看說得不太清楚,搞了半天終于搞定了,現解釋,
                  環境:suse10,jdk1.4.2
                  相同部分就不再多說,以下部分內容,挑csdn上一個詳細的文章粘貼出來,順便總結一下

          一、  錯誤描述

          基本上的錯誤都是以下錯誤

           1java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
           2at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
           3at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:125)
           4at java.lang.Class.forName0(Native Method)
           5at java.lang.Class.forName(Class.java:140)
           6at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
           7at java.awt.Font.initializeFont(Font.java:309)
           8at java.awt.Font.<init>(Font.java:345)
           9at org.jfree.chart.plot.PiePlot.<clinit>(PiePlot.java:186)
          10at org.jfree.chart.ChartFactory.createPieChart3D(ChartFactory.java:416)

          錯誤原因么,大概就是jvm找不到字體文件

          二、問題解決:

          寫一個測試系統環境的小程序

           

          1public 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按照以下順序搜索字體屬性文件:

           

           1font.properties.<language>_<region>_<encoding>.<osVersion>
           2font.properties.<language>_<region>_<encoding>
           3font.properties.<language>_<region>.<osVersion>
           4font.properties.<language>_<region>
           5font.properties.<language>_<encoding>.<osVersion>
           6font.properties.<language>_<encoding>
           7font.properties.<language>_<osVersion>
           8font.properties.<language>
           9font.properties.<encoding>.<osVersion>
          10font.properties.<encoding>
          11font.properties.<osVersion>
          12font.properties
          13

          所以我們需要檢查%JAVA_HOME%/jre/lib/fonts目錄下是否存在font.properties.zh文件,如果沒有則新建一個,或者copy font.properties

          1cp 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#
            8serif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
            9
           10serif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           11
           12serif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           13
           14serif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           15
           16sansserif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           17
           18sansserif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           19
           20sansserif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           21
           22sansserif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           23
           24monospaced.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           25
           26monospaced.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           27
           28monospaced.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           29
           30monospaced.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           31
           32dialog.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           33
           34
           35dialog.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           36
           37dialog.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           38
           39dialog.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           40
           41dialoginput.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           42
           43dialoginput.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           44
           45dialoginput.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           46
           47dialoginput.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           48# Missing Glyph Character
           49#
           50default.char=274f
           51
           52# Component Font Character Encodings
           53#
           54fontcharset.serif.0=sun.io.CharToByteISO8859_1
           55fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK
           56
           57fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
           58fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK
           59
           60fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
           61fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK
           62
           63fontcharset.dialog.0=sun.io.CharToByteISO8859_1
           64fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK
           65
           66fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
           67fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK
           68
           69# Exclusion Ranges
           70#
           71
           72# XFontSet Information
           73#
           74fontset.serif.plain=\
           75-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           76
           77fontset.serif.italic=\
           78-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           79
           80fontset.serif.bold=\
           81-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           82
           83fontset.serif.bolditalic=\
           84-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           85
           86fontset.sansserif.plain=\
           87-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           88
           89fontset.sansserif.italic=\
           90-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           91
           92fontset.sansserif.bold=\
           93-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           94
           95fontset.sansserif.bolditalic=\
           96-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
           97
           98fontset.monospaced.plain=\
           99-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          100
          101fontset.monospaced.italic=\
          102-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          103
          104fontset.monospaced.bold=\
          105-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          106
          107fontset.monospaced.bolditalic=\
          108-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          109
          110fontset.dialog.italic=\
          111-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          112
          113fontset.dialog.bold=\
          114-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          115
          116fontset.dialog.bolditalic=\
          117-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          118
          119fontset.dialog.plain=\
          120-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          121
          122fontset.dialoginput.italic=\
          123-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          124
          125fontset.dialoginput.bold=\
          126-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          127
          128fontset.dialoginput.bolditalic=\
          129-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          130
          131fontset.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
          138fontset.default=\
          139-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
          140
          141


          仔細觀察你可以發現替換的內容基本都是".0"的內容

          特別要注意

           1# Missing Glyph Character
           2#
           3default.char=274f
           4
           5# Component Font Character Encodings
           6#
           7fontcharset.serif.0=sun.io.CharToByteISO8859_1
           8fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK
           9
          10fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
          11fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK
          12
          13fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
          14fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK
          15
          16fontcharset.dialog.0=sun.io.CharToByteISO8859_1
          17fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK
          18
          19fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
          20fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK
          21
          22# Exclusion Ranges
          23#
          24
          25# XFontSet Information
          26#
          27
          28

          修改后的詞部分內容與原文件內容不一致,注意修改此處

          最后值得注意的是在font.properties.zh內容的結尾加上

          1appendedfontpath=/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 閱讀(4023) 評論(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
          樓上絕對正解  回復  更多評論
            
          主站蜘蛛池模板: 镇康县| 南昌县| 安新县| 凤庆县| 泸定县| 盐城市| 墨玉县| 清丰县| 潜江市| 英德市| 卫辉市| 青岛市| 芦山县| 罗平县| 商都县| 平顺县| 康保县| 闽侯县| 黑河市| 花莲市| 钦州市| 宿松县| 靖远县| 班戈县| 东乡县| 莫力| 张家港市| 永年县| 汕尾市| 墨竹工卡县| 阜城县| 济南市| 西昌市| 垫江县| 平山县| 通道| 资阳市| 巴青县| 花垣县| 大关县| 堆龙德庆县|