Java 串行化swing/awt组件
我正在尝试序列化JPanel,但每次出现此错误时:Java 串行化swing/awt组件,java,swing,serialization,jpanel,Java,Swing,Serialization,Jpanel,我正在尝试序列化JPanel,但每次出现此错误时: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: javax.swing.GroupLayout 你能告诉我,可能是什么问题,或者什么是序列化它的正确方法吗 我所做的很简单: 对于序列化: FileOutputStream f = new FileOutputStream("myfile.dat"); ObjectOutput
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: javax.swing.GroupLayout
你能告诉我,可能是什么问题,或者什么是序列化它的正确方法吗
我所做的很简单:
对于序列化:
FileOutputStream f = new FileOutputStream("myfile.dat");
ObjectOutputStream ostream = new ObjectOutputStream(f);
Object object = panel; //where panel is a JPanel type object
ostream.writeObject(object);
ostream.close();
File file = new File("myfile.dat");
ObjectInputStream in;
try {
in = new ObjectInputStream(new FileInputStream(file));
object = (JPanel) in.readObject();
in.close();
} catch (Exception e2) {
e2.printStackTrace();
}
现在进行反序列化:
FileOutputStream f = new FileOutputStream("myfile.dat");
ObjectOutputStream ostream = new ObjectOutputStream(f);
Object object = panel; //where panel is a JPanel type object
ostream.writeObject(object);
ostream.close();
File file = new File("myfile.dat");
ObjectInputStream in;
try {
in = new ObjectInputStream(new FileInputStream(file));
object = (JPanel) in.readObject();
in.close();
} catch (Exception e2) {
e2.printStackTrace();
}
在上一步读取序列化对象时,我遇到了上述错误。原因是什么,或者有什么想法,我们应该怎么做 要实现可序列化,对象(及其除POJO之外的所有部分)需要实现可序列化接口
如果无法更改类,请查看。要序列化对象,它引用的所有对象也需要可序列化。如果不希望序列化引用,可以将其标记为瞬态引用。这意味着,如果您的面板引用了不可序列化的对象,请使它们也可序列化,或者将它们标记为“瞬态”JPanel实现了可序列化 但是javax.swing.GroupLayout没有
因此,您需要将GroupLayout更改为另一个布局类
GroupLayout
(似乎已添加到面板中)不可序列化。有几个选项(从最不有利到最有利)
- 子类
以创建串行代理(请参见第二版)。这是一项相当多的工作,并且由于GroupLayout
没有一套完整的“getter和setter”而变得复杂GroupLayout
- 将
替换为可序列化的GroupLayout
。Java库中有功能性但粗糙的LayoutManager
。其他布局管理器也可用GridBagLayout
- 不要序列化
。使AWT组件序列化(以及整个JavaBeans的事情)是一个可笑的错误JPanel
警告:此类的序列化对象将与将来的Swing版本不兼容