Page 1 of 2
有辦法更改Java程式的預設字型嗎?
Posted: Wed Jan 06, 2010 8:26 pm
by Jackie
最近發現Java程式在我的機器上預設的字型是不能顯示中文和日文的
我的fontconfig/Qt/GTK+的設定應該是沒問題
因為Qt和GTK+的程式都很正常
目前的問題是如果該隻Java程式有支援設定字型改一下就還好
可是如果沒有的話就糟了
所以想知道有沒有辦法改正整個系統中的Java程式的預設字型
這問題困擾我很久了
Google過但是沒找到確切的解決方案
我的JRE是sun-jdk和icedtea6-bin
下面是我為了測試寫的一個Java程式
http://ku.myftp.org/~jackie/UnicodeTest.tar.bz2
我的情況是如果移除掉 UnicodeTestFrame.java 裡的
Code: Select all
helloList.setFont(new Font("Microsoft JhengHei", Font.PLAIN, 16));
視窗右邊的方塊就不能正常顯示文字了
Re: 有辦法更改Java程式的預設字型嗎?
Posted: Wed Jan 06, 2010 9:40 pm
by Jackie
自問自答
如果用sun-jdk的話似乎要修改 /opt/sun-jdk-*/jre/lib/fontconfig.properties
不過我看了她預設值
中文的話他預設是用arphicfonts
而且這檔案改起來似乎相當麻煩 囧
Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 10:19 am
by kingctx530
Jackie wrote:自問自答
如果用sun-jdk的話似乎要修改 /opt/sun-jdk-*/jre/lib/fontconfig.properties
不過我看了她預設值
中文的話他預設是用arphicfonts
而且這檔案改起來似乎相當麻煩 囧
這個不是很容易找的到嗎...??
到sun-jdk-*/jre/lib/底下建立一個fallback的資料夾
再把你的字型檔link過來就能用了吧...我跑netbeans都是這樣.....不然就會口口 ,我一般都用wqy-zenhei的字型

Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 11:41 am
by jojoyakira
Jackie wrote:自問自答
如果用sun-jdk的話似乎要修改 /opt/sun-jdk-*/jre/lib/fontconfig.properties
不過我看了她預設值
中文的話他預設是用arphicfonts
而且這檔案改起來似乎相當麻煩 囧
我的觀念也是改 /opt/sun-jdk-*/jre/lib/fontconfig.properties ,就是因為麻煩,所以得過且過之下也就不改了。
kingctx530 wrote:
這個不是很容易找的到嗎...??
到sun-jdk-*/jre/lib/底下建立一個fallback的資料夾
再把你的字型檔link過來就能用了吧...我跑netbeans都是這樣.....不然就會口口 ,我一般都用wqy-zenhei的字型

剛剛小弟我依照kingctx530兄提供的方法試了一下,發現開
http://www.playok.com/下的board game黑白棋,照樣一堆口口,看樣子非得要改fontconfig.properties不可。..........Orz
原本很興奮說.......

Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 1:12 pm
by kingctx530
jojoyakira wrote:Jackie wrote:自問自答
如果用sun-jdk的話似乎要修改 /opt/sun-jdk-*/jre/lib/fontconfig.properties
不過我看了她預設值
中文的話他預設是用arphicfonts
而且這檔案改起來似乎相當麻煩 囧
我的觀念也是改 /opt/sun-jdk-*/jre/lib/fontconfig.properties ,就是因為麻煩,所以得過且過之下也就不改了。
kingctx530 wrote:
這個不是很容易找的到嗎...??
到sun-jdk-*/jre/lib/底下建立一個fallback的資料夾
再把你的字型檔link過來就能用了吧...我跑netbeans都是這樣.....不然就會口口 ,我一般都用wqy-zenhei的字型

剛剛小弟我依照kingctx530兄提供的方法試了一下,發現開
http://www.playok.com/下的board game黑白棋,照樣一堆口口,看樣子非得要改fontconfig.properties不可。..........Orz
原本很興奮說.......

首先先向Jackie你說聲抱歉..早上剛睡醒....說明少打了一個資料夾..現在你可以這麼做
Code: Select all
mkdir /opt/sun-jdk-1.6.0.17/jre/lib/fonts/fallback
cd /opt/sun-jdk-1.6.0.17/jre/lib/fonts/fallback
ln -s /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc .
晚點補上圖好了,我的gimp還沒有安裝

Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 1:29 pm
by kingctx530
下圖為沒加入字型時的圖

- 沒有字型檔時java的中文字圖
- nottf_java.png (47.6 KiB) Viewed 27791 times
下圖為加入字型時的圖

- 加入字型檔後的java中文字圖
- havettf_java.png (68.97 KiB) Viewed 27791 times
下圖為playok webgame的圖

- playok的遊戲圖
- webgame_java.png (27.52 KiB) Viewed 27791 times
Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 6:50 pm
by jojoyakira
可以了,感謝kingctx530兄。< (_ _) >
這個方法真是太棒了。
小弟這邊的情況是加入/opt/sun-jdk-1.6.0.17/jre/lib/fonts後,無效.....。
Code: Select all
$ cd /opt/sun-jdk-1.6.0.17/jre/lib/fonts
$ sudo ln -sfn /usr/share/fonts/wqy-zenhei fallback
索性再加入/opt/sun-jre-bin-1.6.0.17/lib/fonts後,就成功了。
Code: Select all
$ cd /opt/sun-jre-bin-1.6.0.17/lib/fonts
$ sudo ln -sfn /usr/share/fonts/wqy-zenhei fallback
最後,小弟研究了一下,發現問題應該出在eselect java-nsplugin上,以下是我的設置:
java-config:
- $ java-config -f
sun-jdk-1.6
- $ java-config-2 -f
sun-jdk-1.6
eselect:
- $ eselect java-vm list
Available Java Virtual Machines:
[1] sun-jdk-1.6 system-vm user-vm
[2] sun-jre-bin-1.6
- $ eselect java-nsplugin list
Available Java browser plugins
[1] sun-jdk-1.6
[2] sun-jdk-1.6-plugin2
[3] sun-jre-bin-1.6 current
[4] sun-jre-bin-1.6-plugin2
Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 7:27 pm
by kingctx530
jojoyakira wrote:可以了,感謝kingctx530兄。< (_ _) >
這個方法真是太棒了。
小弟這邊的情況是加入/opt/sun-jdk-1.6.0.17/jre/lib/fonts後,無效.....。
Code: Select all
$ cd /opt/sun-jdk-1.6.0.17/jre/lib/fonts
$ sudo ln -sfn /usr/share/fonts/wqy-zenhei fallback
索性再加入/opt/sun-jre-bin-1.6.0.17/lib/fonts後,就成功了。
Code: Select all
$ cd /opt/sun-jre-bin-1.6.0.17/lib/fonts
$ sudo ln -sfn /usr/share/fonts/wqy-zenhei fallback
最後,小弟研究了一下,發現問題應該出在eselect java-nsplugin上,以下是我的設置:
java-config:
- $ java-config -f
sun-jdk-1.6
- $ java-config-2 -f
sun-jdk-1.6
eselect:
- $ eselect java-vm list
Available Java Virtual Machines:
[1] sun-jdk-1.6 system-vm user-vm
[2] sun-jre-bin-1.6
- $ eselect java-nsplugin list
Available Java browser plugins
[1] sun-jdk-1.6
[2] sun-jdk-1.6-plugin2
[3] sun-jre-bin-1.6 current
[4] sun-jre-bin-1.6-plugin2
oh ~ oh ~ 也是啦,我一般只喜歡用一個版本,因為我有在用java 寫code 所以我都只留jdk的,其實只要設定的對,就不需要像以前這樣改字型

Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 9:38 pm
by Jackie
kingctx530 wrote:這個不是很容易找的到嗎...??
到sun-jdk-*/jre/lib/底下建立一個fallback的資料夾
再把你的字型檔link過來就能用了吧...我跑netbeans都是這樣.....不然就會口口 ,我一般都用wqy-zenhei的字型

我不覺得很容易找啊XD
可能我的關鍵字太糟了
試過"java default font" "java 預設字型" ... 不知道為什麼沒看到這個方法
所以我昨天已經寫一個script來改fontconfig.properties了
嗯...好處就是這樣可以分開設定襯線字型、無襯線字型、等寬字型 ... (炸
不過不管是哪個方法都是每次裝新的jre/jdk升級就死掉了
所以只好用/etc/portage/bashrc裡面的post_src_install硬上
話說後來我發現icedtea的fontconfig.properties比較乾淨
至少是用人類看得懂的字型名稱 (如 DejaVu Sans)
而不是那種古早的方式 (如 -misc-baekmuk_gulim-medium-r-normal--*-%d-*-*-c-*-iso10646-1)
而且官方portage裡面也已經有版本被mark成stable了
試用一下感覺還不錯 看來要把sun jdk拿掉的日子不遠了
附上兩段script
1. fix-java-fonts.pl: sun-jdk 用
Code: Select all
#!/usr/bin/perl
sub map_font
{
my ($family, $style, $encoding) = split /\./, shift;
if ($family eq "serif") { # 襯線
return "dynalab-pmingliu"; #新細明體
}
elsif ($family eq "monospaced") { # 等寬
return "dynalab-mingliu"; # 細明體
}
return "microsoft-microsoft jhenghei"; # 微軟正黑體 (預設)
}
while (<>) {
s/^(.+)=-.+?-(medium|bold|demibold|italic)/"$1=-" . map_font($1) . "-$2"/ge;
print;
}
使用方式:
Code: Select all
$ perl -i fix-java-fonts.pl /opt/sun-jdk-1.6.0.17/jre/lib/fontconfig.properties
2. gen-icedtea-fontconfig.sh: icedtea用
Code: Select all
#!/bin/bash
# 襯線
serif="PMingLiU"
# 無襯線
sansserif="Microsoft JhengHei"
# 等寬
monospaced="MingLiU"
dialog="$sansserif"
dialoginput="$sansserif"
fontnames=("$serif" "$sansserif" "$monospaced")
echo "version=1"
for n in serif sansserif monospaced dialog dialoginput ; do
for s in plain bold italic bolditalic ; do
for c in latin-1 japanese-x0208 korean chinese-big5 chinese-gb18030 ; do
echo "$n.$s.$c=${!n}"
done
done
done
cat <<_EOF_
sequence.allfonts=latin-1
sequence.allfonts.Big5=chinese-big5,latin-1
sequence.allfonts.x-euc-jp-linux=japanese-x0208,latin-1
sequence.allfonts.EUC-KR=korean,latin-1
sequence.allfonts.GB18030=chinese-gb18030,latin-1
sequence.fallback=chinese-big5,chinese-gb18030,japanese-x0208,korean
_EOF_
# 用fc-match程式產生字型檔路徑
for f in "${fontnames[@]}" ; do
echo "filename.${f// /_}=`fc-match -v "$f" | sed -rn '/file:/{s/^.*"(.+)".*$/\1/g; p}'`"
done
使用方式:
Code: Select all
$ bash gen-icedtea-fontconfig.sh >/opt/icedtea6-bin-1.6.2/jre/lib/fontconfig.properites
Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 9:44 pm
by kingctx530
Jackie wrote:kingctx530 wrote:這個不是很容易找的到嗎...??
到sun-jdk-*/jre/lib/底下建立一個fallback的資料夾
再把你的字型檔link過來就能用了吧...我跑netbeans都是這樣.....不然就會口口 ,我一般都用wqy-zenhei的字型

我不覺得很容易找啊XD
可能我的關鍵字太糟了
試過"java default font" "java 預設字型" ... 不知道為什麼沒看到這個方法
所以我昨天已經寫一個script來改fontconfig.properties了
嗯...好處就是這樣可以分開設定襯線字型、無襯線字型、等寬字型 ... (炸
不過不管是哪個方法都是每次裝新的jre/jdk升級就死掉了
所以只好用/etc/portage/bashrc裡面的post_src_install硬上
話說後來我發現icedtea的fontconfig.properties比較乾淨
至少是用人類看得懂的字型名稱 (如 DejaVu Sans)
而不是那種古早的方式 (如 -misc-baekmuk_gulim-medium-r-normal--*-%d-*-*-c-*-iso10646-1)
而且官方portage裡面也已經有版本被mark成stable了
試用一下感覺還不錯 看來要把sun jdk拿掉的日子不遠了

嗯,那種古早的方式根本不是人看的
反正能解決問題才重要

Re: 有辦法更改Java程式的預設字型嗎?
Posted: Thu Jan 07, 2010 10:09 pm
by jojoyakira
Jackie wrote:
....
附上兩段script
1. fix-java-fonts.pl: sun-jdk 用
.....
2. gen-icedtea-fontconfig.sh: icedtea用
.....
哇!好強大。
不知道是否能將這兩段scripts加到 gentoo-taiwan overlay?以後也比較好找,而且改 fontconfig.properties 是sun java的老問題了,幾乎每個安裝sun java的人都會遇到,如果有這兩段scripts那將會省下很多修改 fontconfig.properties 的時間。

Re: 有辦法更改Java程式的預設字型嗎?
Posted: Fri Jan 08, 2010 9:41 am
by Jackie
jojoyakira wrote:哇!好強大。
不知道是否能將這兩段scripts加到 gentoo-taiwan overlay?以後也比較好找,而且改 fontconfig.properties 是sun java的老問題了,幾乎每個安裝sun java的人都會遇到,如果有這兩段scripts那將會省下很多修改 fontconfig.properties 的時間。

我是覺得像這種字型設定
每個人的喜好不同
所以擺在overlay可能不恰當
跟設定相關的東西還是應該放在/etc ...XD
所以Java這個fontconfig.properties真是亂來...為什麼它不用
fontconfig呢@@
我自己是把這段script寫在/etc/portage/bashrc裡面... 這樣以後更新jre也不用手動再改一次字型了
Code: Select all
post_src_install() {
case "${CATEGORY}/${PN}" in
dev-java/sun-jdk)
local d="$D/opt/$P/jre/lib"
perl -i fix-java-fonts.pl "$d/fontconfig.properties"
rm -f "$d/fontconfig".{bfc,*.*}
;;
dev-java/icedtea6-bin)
local d="$D/opt/$P/jre/lib"
gen-icedtea-fontconfig.sh >"$d/fontconfig.properties"
rm -f "$d/fontconfig".{bfc,*.*}
;;
easc
}
Re: 有辦法更改Java程式的預設字型嗎?
Posted: Fri Jan 08, 2010 11:08 am
by kingctx530
Jackie wrote:jojoyakira wrote:哇!好強大。
不知道是否能將這兩段scripts加到 gentoo-taiwan overlay?以後也比較好找,而且改 fontconfig.properties 是sun java的老問題了,幾乎每個安裝sun java的人都會遇到,如果有這兩段scripts那將會省下很多修改 fontconfig.properties 的時間。

我是覺得像這種字型設定
每個人的喜好不同
所以擺在overlay可能不恰當
跟設定相關的東西還是應該放在/etc ...XD
所以Java這個fontconfig.properties真是亂來...為什麼它不用
fontconfig呢@@
我自己是把這段script寫在/etc/portage/bashrc裡面... 這樣以後更新jre也不用手動再改一次字型了
Code: Select all
post_src_install() {
case "${CATEGORY}/${PN}" in
dev-java/sun-jdk)
local d="$D/opt/$P/jre/lib"
perl -i fix-java-fonts.pl "$d/fontconfig.properties"
rm -f "$d/fontconfig".{bfc,*.*}
;;
dev-java/icedtea6-bin)
local d="$D/opt/$P/jre/lib"
gen-icedtea-fontconfig.sh >"$d/fontconfig.properties"
rm -f "$d/fontconfig".{bfc,*.*}
;;
easc
}
Java 字型問題己經超久了,一直沒有被好好修正過.......至少1.6後還能透過簡單的link就能處理,以前改過幾次....重灌的時候又沒留到設定檔真的會暈倒

Re: 有辦法更改Java程式的預設字型嗎?
Posted: Tue Apr 06, 2010 3:49 pm
by dnrmtn1121
我用以下方式設定fireflysung.ttf 成為Java預設字型:
在/usr/share/fonts/turetype/arphic底下,ln -s fireflysung.ttf uming.ttf
fc-cache -f -v
Re: 有辦法更改Java程式的預設字型嗎?
Posted: Tue Apr 06, 2010 6:50 pm
by jojoyakira
dnrmtn1121 wrote:我用以下方式設定fireflysung.ttf 成為Java預設字型:
在/usr/share/fonts/turetype/arphic底下,ln -s fireflysung.ttf uming.ttf
fc-cache -f -v
你使用的應該不是原來的 fontconfig.properties 吧!
小弟我查了一下 /opt/sun-jre-bin-1.6.0.19/lib/ 內的 fontconfig.properties ,並沒有 uming.ttf 的資料:
Code: Select all
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.properties
以下這幾個也沒有:
Code: Select all
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.properties.src
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.Sun.properties.src
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.SuSE.properties.src
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.RedHat.2.1.properties.src
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.RedHat.3.properties.src
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.RedHat.4.properties.src
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.Turbo.properties.src
倒是 fontconfig.Ubuntu.properties.src 有 uming.ttc 字型的資料:
Code: Select all
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.Ubuntu.properties.src
allfonts.chinese-cn-iso10646=-arphic-ar pl uming cn-light-r-normal--*-%d-*-*-c-*-iso10646-1
allfonts.chinese-tw-iso10646=-arphic-ar pl uming tw-light-r-normal--*-%d-*-*-c-*-iso10646-1
allfonts.chinese-hk-iso10646=-arphic-ar pl uming hk-light-r-normal--*-%d-*-*-c-*-iso10646-1
filename.-arphic-ar_pl_uming_cn-light-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttc
filename.-arphic-ar_pl_uming_tw-light-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttc
filename.-arphic-ar_pl_uming_hk-light-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttc
fontconfig.RedHat.properties.src 有一筆 uming.ttf 字型的資料:
Code: Select all
/opt/sun-jre-bin-1.6.0.19/lib $ grep uming fontconfig.RedHat.properties.src
filename.-misc-ar_pl_shanheisun_uni-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/chinese/TrueType/uming.ttf
以下是 fontconfig.properties 中的 ttf、ttc 字型資料:
Code: Select all
/opt/sun-jre-bin-1.6.0.19/lib $ grep ttf fontconfig.properties
filename.-arphic_technology_co.-ar_pl_mingti2l_big5-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/arphicfonts/bsmi00lp.ttf
filename.-misc-baekmuk_batang-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/baekmuk-fonts/batang.ttf
filename.-misc-baekmuk_gulim-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/baekmuk-fonts/gulim.ttf
filename.-misc-kochi_gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0=/usr/share/fonts/kochi-substitute/kochi-gothic-subst.ttf
filename.-misc-kochi_mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0=/usr/share/fonts/kochi-substitute/kochi-mincho-subst.ttf
filename.-misc-ming for iso10646 -medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/hkscs-ming/min_uni.ttf
/opt/sun-jre-bin-1.6.0.19/lib $ grep ttc fontconfig.properties
所以使用你提供的方法,還是要改 fontconfig.properties 。