在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"