<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

    一、  錯誤描述

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

     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找不到字體文件

    二、問題解決:

    寫一個測試系統(tǒng)環(huán)境的小程序

     

    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

        例如輸入結(jié)果:
    zh
    CN
    GB2312
    2.4.19-4GB
    對于我們來說關(guān)注的地方其實只有第一行“zh”,說明目前環(huán)境是簡體中文,

    從Sun的文檔"Adding Fonts to the Java Runtime"[參見參考文獻(xiàn)1]中,我們可以得知: 在英文環(huán)境下,字體屬性由無后綴的font.properties 定義。為了一些操作系統(tǒng)的特殊問題,字體屬性文件的名字可以加入操作系統(tǒng)的版本號作為后綴。例如,Solaris 2.5.1 不支持 TrueType 字體,所以字體屬性文件font.properties.5.5.1 將只包含 F3 字體。在大多數(shù)操作系統(tǒng)中,版本后綴的值由System.getProperty("os.version")來確定。

    如果環(huán)境是日文、韓文、簡體中文或繁體中文,就必須使用相應(yīng)于特定環(huán)境的 font.properties 文件。這些文件可以通過文件名后邊加上相應(yīng)的國家或者locale后綴識別,格式為font.properties.<locale>。該<locale>實際上由<language>_<region>_<encoding>三部分構(gòu)成。而<language>、<region>和<encoding>分別對應(yīng)了系統(tǒng)屬性(由System.getProperty方法返回的字符串)"user.language"、"user.region"和"file.encoding"。而這個font.properties.<locale>名也可以跟操作系統(tǒng)的版本結(jié)合使用。

    概括的講,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這個目錄,所以有時候會叫人感覺很頭疼,但是仔細(xì)檢查你會發(fā)現(xiàn)路經(jīng)/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 的字體規(guī)則改為 -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,將里面內(nèi)容替換如下:

      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


    仔細(xì)觀察你可以發(fā)現(xiàn)替換的內(nèi)容基本都是".0"的內(nèi)容

    特別要注意

     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

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

    最后值得注意的是在font.properties.zh內(nèi)容的結(jié)尾加上

    1appendedfontpath=/usr/lib/X11/fonts/truetype

    這是為了讓jvm去尋找字體文件

    你也可以將環(huán)境變量export JAVA_FONTS=/usr/lib/X11/fonts/truetype假如系統(tǒng)或你的賬號啟動sh的.profile里

    至此中文問題配置完畢

    四、其他問題,

    如果使用tomcat 設(shè)置環(huán)境變量:
    CATALINA_OPTS="-Djava.awt.headless=true"
    export CATALINA_OPTS
    (如果你想每次開機(jī)自動生效,則可把這兩句寫入系統(tǒng)或者你的賬號啟動sh的.profile里)

    到此關(guān)于linux顯示jfreechart圖像顯示亂碼的環(huán)境配置問題既可以得到解決,其余基本就是代碼的問題,可仔細(xì)檢查jfreechat文檔,

    jfreechart關(guān)注點:

    設(shè)置Legend的font
    x軸坐標(biāo)名稱的font
    y軸坐標(biāo)名稱的font


                    

    posted on 2008-07-01 18:46 acerbic coffee 閱讀(4034) 評論(5)  編輯  收藏 所屬分類: 個人筆記

    FeedBack:
    # re: JFreeChart在linux端圖片顯示亂碼問題解決
    2008-12-25 10:19 | 劉鑫
    其實根本沒有那么麻煩
    直接天網(wǎng)ftp搜索下載simsun.ttf
    然后在jre/lib/fonts下面新建fallback文件夾,將simsun.ttf放入即可  回復(fù)  更多評論
      
    # re: JFreeChart在linux端圖片顯示亂碼問題解決[未登錄]
    2010-09-16 13:57 | liuyang
    樓上正解,感謝!  回復(fù)  更多評論
      
    # re: JFreeChart在linux端圖片顯示亂碼問題解決
    2012-06-18 18:43 | bincrack
    絕對正解 @liuyang
      回復(fù)  更多評論
      
    # re: JFreeChart在linux端圖片顯示亂碼問題解決
    2013-10-16 13:37 | zzs
    是的@劉鑫
      回復(fù)  更多評論
      
    # re: JFreeChart在linux端圖片顯示亂碼問題解決
    2014-02-28 10:51 | haer
    樓上絕對正解  回復(fù)  更多評論
      
    主站蜘蛛池模板: 国产亚洲综合久久| 婷婷综合缴情亚洲狠狠尤物| 久久不见久久见免费影院www日本| 亚洲一级片免费看| 免费无遮挡无码永久视频| 最近中文字幕mv免费高清在线| 日本片免费观看一区二区| 免费无码又爽又刺激高潮| 国产禁女女网站免费看| 国产A在亚洲线播放| 国产亚洲人成网站观看| 国产男女爽爽爽爽爽免费视频| 亚洲日韩人妻第一页| 久久亚洲中文字幕精品有坂深雪| 国产黄色片免费看| 女人张开腿等男人桶免费视频| 亚洲精品久久久www| 亚洲午夜国产精品无卡| 亚洲AV男人的天堂在线观看| 国产一区二区三区免费观在线| 午夜免费福利网站| 美女黄频a美女大全免费皮| 99久久免费国产香蕉麻豆 | 一级黄色免费毛片| 91免费国产自产地址入| 亚洲中文字幕一二三四区苍井空| 国产成人自产拍免费视频| 久久久久久亚洲精品| 美女视频黄频a免费大全视频| 国产成人亚洲综合| 69视频免费在线观看| 亚洲精品女同中文字幕| 亚洲视频在线观看地址| 久久av免费天堂小草播放| 久久久久亚洲精品日久生情 | 猫咪免费人成网站在线观看| 亚洲综合日韩久久成人AV| 蜜臀亚洲AV无码精品国产午夜.| 曰批视频免费30分钟成人| 亚洲高清在线视频| 蜜桃精品免费久久久久影院|