swing英文版xp乱码问题解决

本文介绍了一种在英文版Windows XP系统下解决Java Swing程序中文乱码的方法。通过修改Swing程序中的字体设置来避免乱码问题,同时讨论了如何在不同系统环境下编译和运行程序时遇到的编码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近在维护swing程序时,有客户发现英文版xp下存在乱码问题(由于某些原因用户不能换系统),一开始以为是操作

 

系统设置问题,但用户说其他软件中文显示都正常,于是

 

找了VMware装了英文版的windows xp  一试 果然是乱码。

 

分析原因如下:其他软件中文显示都正常 说明os中文字库已装,估计是和jre有关,于是

 

就找和jre有关编码集问题

 

有人说和编译时候的encoding参数有关

 

样例代码在中文平台上编译,生成zhclass
样例代码在英文平台上编译,输出enclass
(1) zhclass在中文平台上执行ok,但是在英文平台上不行
(2) enclass在英文平台上执行ok,但是在中文平台上不行
出处:http://oznyang.iteye.com/blog/30697

 

我一直没找到这个参数怎么会使用,但是找到了执行时设置支付编码集的命令

 

-D<name>=<value> set a system property

 

如: javaw -Dfile.encoding=GBK -cp  xx.jar com.xx.main

 

System.getProperties() 中和字符集有关的变量有:

file.encoding
sun.io.unicode.encoding
sun.jnu.encoding
user.country
user.languag

 

进尝试发现file.encoding有对控制台的System.out.println有用加了后无乱码,但是界面上乱码依旧。

 

必须当作启动参数设置,在程序中System.setProperties("file.encoding", "GBK")无效果


后来继续网上搜索,找到原因如下:

swing中UIManager根据操作系统语言设置的不同会使用了默认的字体

 

英文版windows xp下默认字体为:
family=Tahoma,name=Tahoma,style=plain,size=11


Tahoma好像不支持中文乱码全是方框需替换成本地指定的能显示中文的字体样式 比如: 宋体

Font font = new Font("宋体", Font.PLAIN, 12);
Enumeration<Object> keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
    Object key = keys.nextElement();
    if (UIManager.get(key) instanceof FontUIResource){
        UIManager.put(key, new FontUIResource(font));
    }
    else if(UIManager.get(key) instanceof Font){
     UIManager.put(key, font);
    }
    //System.out.println("key:"+key+"  value:"+UIManager.get(key));
}

 启动时强制指定UIManager中的字体设置即可解决界面上的方框乱码,

 

这时发现 标题栏还是乱码。。。

又继续搜索,发现标题栏是使用皮肤包substance的标题栏

JFrame.setDefaultLookAndFeelDecorated(true);

 
找了半天也没找到解决方法,目前只能使用swing自带的标题栏,不加上面语句就可以正常显示。

 

附件为测试demo

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值