2008年11月2日星期日

linux下java swing问题的解决
在linux做java开发的朋友都知道swing在linux下有些很令人头疼的问题。

第一个问题就是scim输入法和swing的冲突问题导致键盘失效,尤其是开了compiz之后。

对于这个问题网上有很多处理的方法,例如添加环境变量AWT_TOOLKIT=MToolkit,这个方法还是不能解决swing程序中键盘失效的问题。

国外论坛上找到一个很好的解决方法就是:

sudo cp ~/.scim/config /root/.scim/

之后我在netbeans里面从来没有发生过键盘失效的问题

第二个麻烦就是在Ubuntu使用Java来编写Swing应用程序时一个比较大的问题就是不能使用SystemLookAndFeel。

例如运行jconsole的时候会报如下错:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.sun.java.swing.plaf.gtk.GTKLookAndFeel.initSystemColorDefaults(GTKLookAndFeel.java:1267)
at com.sun.java.swing.plaf.gtk.GTKLookAndFeel.loadStyles(GTKLookAndFeel.java:1509)
……

有的人给出不完美的解决方案,就是把语言环境改成英文:

export LANG=en

这样swing应用程序就可以正常运行了,但这样对于使用中文的用户来说就很不方便,界面变成了英文。实际上出现这个问题是因为swing的默认laf采用systemlaf,而ubuntu里却没有定义这个laf

好的解决方法是在程序启动时传递JVM运行参数 -Dswing.systemlaf=javax.swing.plaf.metal.MetalLookAndFeel

或者在/etc/environment 文件在最后增加上:

_JAVA_OPTIONS="-Dswing.systemlaf=javax.swing.plaf.metal.MetalLookAndFeel"