0

我们在jGoodies-looks 2.2.2版本中使用来自 JGoodies 的 PlasticLookAndFeel 。我知道这个版本并不新,但我们也尝试过使用当前版本的 JGoodies,但没有帮助。

由于更新到 Java 1.6.0_251.7.0_25我们有几个问题,我们无法解决。

一些示例效果是:

Stack Trace:
null
javax.swing.JFileChooser.isTraversable(Unknown Source)
javax.swing.JFileChooser.setCurrentDirectory(Unknown Source)
javax.swing.JFileChooser.<init>(Unknown Source)

或者:没有可见和不可调整大小的内容的小 JDialogs

我们还尝试集中对 UIManager.setLookAndFeel(xx) 的调用并将其放在 EDT 线程中,但这并没有解决问题。(Java for OS X 2013-004 如何影响(破坏)Swing 应用程序?如果我们删除这些调用,MetalLookAndFeel 一切正常。

问题只出现在:

  • Java 1.6.0 更新 51 或 Java 1.7.0 更新 25
  • Java Webstart
  • 非标准的外观和感觉

如果有人知道解决方案或可以帮助我们提供一些提示,我们将非常高兴。

谢谢。

4

1 回答 1

0

我们解决了这个问题。这是一个仅在 Webstart 中出现的类加载问题。

一个简单的解决方法是:

  • 使用 Webstart-Console (Java -> Extended -> Java Console) 启动应用程序。

一个解决方案是:

  • 在 LookAndFeel-Method initComponentDefaults() 中将不同的 ClassLoader 添加到 UIDefaults。

你可以这样做:

protected void initComponentDefaults(final UIDefaults table) {
    table.put("ClassLoader", LookUtils.class.getClassLoader());
{

或者

protected void initComponentDefaults(final UIDefaults table) {
    final Object[] lookAndFeelDefaults = {"ClassLoader", LookUtils.class.getClassLoader()}
    table.putDefaults(lookAndFeelDefaults);

{

还建议您在 AWT-Event-Dispatcher-Thread 中设置外观。

javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
    @Override
    public void run() {
  try {
           javax.swing.UIManager.setLookAndFeel(applicationLookAndFeel);
  } catch (Exception e) {
     e.printStackTrace();
  }
    }
});

原始帖子中的 NullPointer 是由无法使用标准类加载器加载的缺少图标引起的。

于 2013-09-11T07:58:08.297 回答