RFR: 6441373: Editing JTable is not Serializable [v4]
Prasanta Sadhukhan
psadhukhan at openjdk.org
Fri Dec 12 03:46:54 UTC 2025
On Fri, 12 Dec 2025 03:13:28 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
> So, as I see it is mentioned `an instance of a static nested class (which is in this case GenericEditor) would be serialized along with the outer class instance is if the outer class instance holds an explicit reference to an instance of that static nested class as one of its fields`, but no such explicit reference exists as far I can see. The stacktrace shows the exception comes from `at java.desktop/javax.swing.event.EventListenerList.writeObject(EventListenerList.java:286)` but even making `EventListenerList `transient in `AbstractCellEditor `and `RowSorter `which are referenced in JTable, doesn't help
>
> Also, as per this stackoverflow https://stackoverflow.com/questions/19282817/why-do-jtables-make-tablemodels-non-serializable-when-rendered it is told "when you add a TableModelListener to an AbstractTableModel implementation, another listener is added in addition to the one you added, of type javax.swing.event.TableModelListener which isn't serializable" but I could not see how and also following the same "workaround" of removing TableModelListener before serialization and adding it back, doesn't help so if anyone has any idea of how to find the reference which is causing GenericEditor to be serialized, please let me know
It seems only if we make JComponent's EventListenerList transient
/** A list of event listeners for this component. */
protected transient EventListenerList listenerList = new EventListenerList();
only then, the GenericEditor class is not getting serialized..
-------------
PR Comment: https://git.openjdk.org/jdk/pull/28627#issuecomment-3644779282
More information about the client-libs-dev
mailing list