spark原来使用的是Synthetica的外观,与文件对话框相关的SyntheticaFileChooserUI会抛出空指针异常,而且它是共享的,不方便通过升级来解决问题。
可以改为使用Substance的外观,由于先使用的是4.1的版本,它可以提供几十个漂亮的观感,但是框架的主菜单中包含了许多Substance菜单,原来它是可以配置的,通过UIManager将属性substancelaf.noExtraElements设为true,即可去掉这些菜单。后来发现它的组合框JComboBox的自动完成功能容易让普通用户误解,即按Backspace时删除不掉的错觉影响用户体验,这时可以通过UIManager将属性lafwidgets.comboboxNoAutoCompletion设为true,即可去掉自动完成功能。
spark的解决方案是直接使用了6.0版本的Substance,它和4.1版本是不兼容的(没有上面的问题,也没有上面的属性),只是要求所有的Swing GUI代码都要在Event Dispatch Thread上执行(否则将抛出异常并失败),所以spark将这些代码包装在EventQueue或SwingUtilities的invokeLater里面运行。Substance的项目主页为:https://substance.dev.java.net/。