可序列化的LookAndFeel - ClassCastException

时间:2011-08-14 09:03:34

标签: java swing user-interface

我需要将LookAndFeel接口的副本序列化到该文件中。结果我写了下面的代码:

public class SerializableLookAndFeel extend LookAndFeel implement Serializable {
    public String getID() {
        return "";
    }
    public String getDescription() {
        return "";
    }
    public String getName() {
        return "";
    }
    public boolean isSupportedLookAndFeel() {
        return false;
    }
    public boolean isNativeLookAndFeel() {
        return false;
    }
}

运行时我得到了

  

线程“main”中的异常java.lang.ClassCastException:   javax.swing.plaf.metal.MetalLookAndFeel无法强制转换为   test.SerializableLookAndFeel

我试图扩展MetalLookAndFeel,但在运行时我得到了ClassCastException。

如何设法将LookAndFeel序列化为文件?

3 个答案:

答案 0 :(得分:1)

1)只是错别字:-)不是extend LookAndFeel而是extends LookAndFeel

2)Set the Look and Feel作为参数并不是一个好主意,确保您的L& F变更必须是:

try {
   UIManager.setLookAndFeel(laf[index].getClassName());
   SwingUtilities.updateComponentTreeUI(frame);
   //or SwingUtilities.windowForComponent(myComponent)
} catch (Exception exc) {
   exc.printStackTrace();
}

答案 1 :(得分:1)

首先,我认为这是一个错字,你的意思是extends而不是extendLookAndFeel类有2个直接已知子类BasicLookAndFeelMultiLookAndFeel

您的例外情况表明您正试图将MetalLookAndFeel投射到SerializableLookAndFeel。您的SerializableLookAndFeel展开LookAndFeel,而MetalLookAndFeel展开BasicLookAndFeel。实际上,你正试图将兄弟姐妹的孩子分配到你的班级,这是行不通的。

如果问题仍然存在,请尝试扩展BasicLookAndFeel尝试发布测试代码。

答案 2 :(得分:1)

你做的很奇怪。您的SerializableLookAndFeel是({1}}的兄弟姐妹,所以演员阵容无效。

MetalLookAndFeel扩展MetalLookAndFeel扩展BasicLookAndFeel并实施LookAndFeel,因此再次添加Serializable毫无意义。

如何简单地尝试将其序列化?会发生什么?

你真的需要序列化外观和感觉吗?不会简单地保存它的名字(或其他)吗?