紧急求助!Ubuntu下Java应用程序突然出现字体异常
1054 21
[1 楼] BlueChord [资深泡菜]
10-6-28 16:34
偶正在做毕业论文,是一个linux下的基于Java的软件,之前已经做了几个月了,一直都很正常(用的Kubuntu 9.10)

上个月觉得Kubuntu不太好用(主要是开机时不知为何 不能通过修改rcS.d文件夹自动加载一些服务),于是换成了Ubuntu 9.10,结果整个软件的字体就全变了,变的又丑又宽。。昨天试着更新到了Ubuntu 10.04,结果问题依然存在。

让我无法理解的是,我把源代码拷到另外一台同样运行Ubuntu 9.10的笔记本上,运行软件,字体就一切正常。。

由于软件界面很复杂,所以所有的组件我全都是手动设置的坐标,现在出现这个问题,导致软件完全无法继续开发下去了。。请教各位DX,这到底是由什么引起的?linux下的Java应用程序中的字体由哪个文件控制?谢谢!
[21 楼] BlueChord [资深泡菜]
10-6-30 06:48
问题已解决。。算是个workaround吧,从JDK里入手的话找了两天都找不到办法。

解决方案就是——在程序里手动设置每个JComponent的字体(调用setFont()方法)。

For the record,可以在初始化完JPanel之后,调用getComponents()方法,然后在一个for循环里对得到的数组的每一个元素进行setFont操作,这样一行代码就可以设置整个JPanel里所有JComponent的字体了。不过缺点是JButton里的字体仍然无法改变。

只能这样了,幸好我用不上JButton,谢谢各位帮助!
[21 楼] BlueChord [资深泡菜]
10-6-30 06:48
问题已解决。。算是个workaround吧,从JDK里入手的话找了两天都找不到办法。

解决方案就是——在程序里手动设置每个JComponent的字体(调用setFont()方法)。

For the record,可以在初始化完JPanel之后,调用getComponents()方法,然后在一个for循环里对得到的数组的每一个元素进行setFont操作,这样一行代码就可以设置整个JPanel里所有JComponent的字体了。不过缺点是JButton里的字体仍然无法改变。

只能这样了,幸好我用不上JButton,谢谢各位帮助!
[20 楼] BlueChord [资深泡菜]
10-6-29 17:46
原文由 okpp 在2010-06-29 16:42发表
如果解决不了,就让程序自动把字号改小一点吧.


看截图能发现, 只是宽度变了, 高度基本没变.

其次, 这软件是做给别人用的..
[19 楼] okpp [泡菜]
10-6-29 16:42
如果解决不了,就让程序自动把字号改小一点吧.
[18 楼] BlueChord [资深泡菜]
10-6-29 07:05
真的没人知道这个问题吗?怎么试都不行,接近崩溃的边缘了。。连experts-exchange都没人会回答。。
[17 楼] 南船 [泡菜]
10-6-28 18:09
原文由 BlueChord 在2010-06-28 17:36发表

现在基本可以排除是kubuntu的原因了,现在的问题是,另一台同样运行ubuntu 9.10的笔记本就可以完全正常的显示这些字体,而正在用的这台机器却显示不正常..

刚才试着把那台笔记本上所有的字体文件和java字体配置文件都拷过来覆盖了,结果依然不行.真是无法理解.

以前用C++时也常发现这样的事 后来发现都是字体的问题(现在大部份的包装软件都有一个捆绑字体的文件夹 不就是让咱把所设的字体打包给用户机用嘛) LZ再认真找找所用的字体 单独重拷一下试试!
[16 楼] bigonez [资深泡菜]
10-6-28 18:02
Java的字体,历来都是在java虚拟机里面,自己控制的。所以才有/usr/lib/jvm/java-6-sun/jre/lib/fonts/这些东西。

前面的链接中,提到的是“桥接方式”的字体设置,把Linux的字体,拉到java里来用。

好像与java/lib里的font.properties有关,也许。
http://java.sun.com/j2se/1.4.2/docs/guide/intl/fontprop.html
http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html
[15 楼] bigonez [资深泡菜]
10-6-28 17:57
很长时间不用,记不清楚了。随便找两个,看看能不能应急。

http://forum.ubuntu.org.cn/viewtopic.php?t=33767
http://blog.csdn.net/rongmj726/archive/2009/08/19/4463107.aspx
[14 楼] BlueChord [资深泡菜]
10-6-28 17:36
原文由 stupidyork 在2010-06-28 17:33发表

有没有可能是你的ubuntu没有安装kubuntu的那个字体?


现在基本可以排除是kubuntu的原因了,现在的问题是,另一台同样运行ubuntu 9.10的笔记本就可以完全正常的显示这些字体,而正在用的这台机器却显示不正常..

刚才试着把那台笔记本上所有的字体文件和java字体配置文件都拷过来覆盖了,结果依然不行.真是无法理解.
[13 楼] stupidyork [资深泡菜]
10-6-28 17:33
原文由 BlueChord 在2010-06-28 17:22发表

嗯..的确是这样,看来是系统默认使用的字体变了.
但根据我google的结果,linux下java程序的字体都是由我刚才提到的那个文件控制的,而我两台运行ubuntu(不是kubuntu了)的电脑上那个配置文件完全相同,显示出来却不一样..

有没有可能是你的ubuntu没有安装kubuntu的那个字体?
[12 楼] BlueChord [资深泡菜]
10-6-28 17:22
原文由 就是爱忽悠 在2010-06-28 17:15发表

看截图,似乎不是字体变肥,而是使用了不同的字体(参考小写字母a)。

我在gtk环境下使用qt软件的话,可以运行“QT4 Settings“来修改字体,不过我不清楚kde下的java是否跟qt库的字体设定相关。


嗯..的确是这样,看来是系统默认使用的字体变了.
但根据我google的结果,linux下java程序的字体都是由我刚才提到的那个文件控制的,而我两台运行ubuntu(不是kubuntu了)的电脑上那个配置文件完全相同,显示出来却不一样..
[11 楼] 就是爱忽悠 [泡菜]
10-6-28 17:15
原文由 BlueChord 在2010-06-28 17:00发表

已经修改了/usr/lib/jvm/java-6-sun/jre/lib/fontconfig.properties 也就是java控制字体的配置文件 但是没用。。
谢谢!


看截图,似乎不是字体变肥,而是使用了不同的字体(参考小写字母a)。

我在gtk环境下使用qt软件的话,可以运行“QT4 Settings“来修改字体,不过我不清楚kde下的java是否跟qt库的字体设定相关。
[10 楼] BlueChord [资深泡菜]
10-6-28 17:13
在线等..
[9 楼] BlueChord [资深泡菜]
10-6-28 17:00
原文由 lihn 在2010-06-28 16:47发表
系统配置文件的问题


已经修改了/usr/lib/jvm/java-6-sun/jre/lib/fontconfig.properties 也就是java控制字体的配置文件 但是没用。。
谢谢!
[8 楼] BlueChord [资深泡菜]
10-6-28 16:57
这是刚截的图 字体变宽变大
[7 楼] BlueChord [资深泡菜]
10-6-28 16:55
按照无忌规矩,上图说明
这是之前在kubuntu下的截图,字体正常
[6 楼] lihn [资深泡菜]
10-6-28 16:47
系统配置文件的问题
[5 楼] BlueChord [资深泡菜]
10-6-28 16:45
原文由 就是爱忽悠 在2010-06-28 16:44发表
中文字体?英文字体通常没有问题。

可以参考一下这个,或许有帮助:

http://www.ibloglife.com/archives/solve-ubuntu-java-garbled.html


人在国外,用的英文字体。。
谢谢帮助!
[4 楼] BlueChord [资深泡菜]
10-6-28 16:44
原文由 stupidyork 在2010-06-28 16:41发表
不懂,帮顶
配置文件的问题?系统新建一个用户试试看?


谢谢帮顶!
肯定是配置文件的问题,就是不知道是哪个文件,关键是,两台电脑我都用的Ubuntu 9.10和标准的sun-java6-jdk包安装的JDK,字体也应该是一样的啊。。
我是所有的工作都在root用户下完成的。
[3 楼] 就是爱忽悠 [泡菜]
10-6-28 16:44
中文字体?英文字体通常没有问题。

可以参考一下这个,或许有帮助:

http://www.ibloglife.com/archives/solve-ubuntu-java-garbled.html
[2 楼] stupidyork [资深泡菜]
10-6-28 16:41
不懂,帮顶
配置文件的问题?系统新建一个用户试试看?