I am trying to serialize a JPanel but everytime i get this error:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: javax.swing
JPanel implements Serializable...
But javax.swing.GroupLayout don't.
So, you need to change GroupLayout to another layout class!
GroupLayout
, which appears to have been added to the panel, is not serialisable. There are a few options (listed least to most favourable).
Subclass GroupLayout
to create a serial proxy (see Effective Java 2nd Ed). This is a fair bit of work, and is complicated by GroupLayout
not having a complete set of "getters and setters".
Replace GroupLayout
with a serialisable LayoutManager
. There's the functional but rough GridBagLayout
in the Java library. Other layout managers are available.
Don't serialise the JPanel
. Making AWT components serialisable (and the whole JavaBeans thing) was a laughable mistake.
To serialize an object, all the objects it references need to also be serializable aswell. You can mark a reference transient
if you don't want it to be serialized. This means, if your panel refers to objects which are not serilizable, make them serilizable aswell or mark them transient
To be serializeable the object (and all the parts of it with exception of the POJOs) needs to implement the Serializable interface.
If you cannot change the class, take a look at XStream.