我需要将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序列化为文件?
答案 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
而不是extend
。 LookAndFeel
类有2个直接已知子类BasicLookAndFeel
和MultiLookAndFeel
。
您的例外情况表明您正试图将MetalLookAndFeel
投射到SerializableLookAndFeel
。您的SerializableLookAndFeel
展开LookAndFeel
,而MetalLookAndFeel
展开BasicLookAndFeel
。实际上,你正试图将兄弟姐妹的孩子分配到你的班级,这是行不通的。
如果问题仍然存在,请尝试扩展BasicLookAndFeel
尝试发布测试代码。
答案 2 :(得分:1)
你做的很奇怪。您的SerializableLookAndFeel
是({1}}的兄弟姐妹,所以演员阵容无效。
MetalLookAndFeel
扩展MetalLookAndFeel
扩展BasicLookAndFeel
并实施LookAndFeel
,因此再次添加Serializable
毫无意义。
如何简单地尝试将其序列化?会发生什么?
你真的需要序列化外观和感觉吗?不会简单地保存它的名字(或其他)吗?