JDK-4966168 : JInternalFrame not serializable in Motif & GTK L&F
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 5.0
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2003-12-10
  • Updated: 2004-03-15
  • Resolved: 2004-03-15
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
5.0 b43Fixed
Related Reports
Relates :  
Relates :  
Description
JInternalFrame is not serializable in Motif & GTK L&F while it can be serialize
using other L&F's
Steps to reproduce:
1) Run the attached test TestSerializeInternalFrame
2) Change L&F to Motif or GTK using Menu "Look And Feel"
3) Click on button "Serialize InternalFrame"
4) It will throw Exception in console
5) Now try serializing in someother look and feel it will
   give message ""Successfully serialized JInternalFrame" on console

Tested on Tiger b30

Following is the exception message when serializing JInternalFrame under Motif
----------------------------------------------
Failed serializing javax.swing.JInternalFrame
java.io.NotSerializableException: javax.swing.JMenuItem$MenuItemPropertyChangeListener
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1072)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1366)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1338)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1281)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1070)
	at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1242)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1066)
	at java.io.ObjectOutputStream.access$100(ObjectOutputStream.java:135)
	at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1509)
	at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:418)
	at java.awt.Container.writeObject(Container.java:3452)
	at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:489)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:902)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1330)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1281)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1070)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1366)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1338)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1281)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1070)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
	at java.beans.PropertyChangeSupport.writeObject(PropertyChangeSupport.java:427)
	at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:489)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:902)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1330)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1281)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1070)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1366)
	at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:380)
	at java.awt.Component.writeObject(Component.java:7363)
	at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:489)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:902)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1330)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1281)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1070)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
	at SerializeTest.serializeObject(SerializeTest.java:152)
	at SerializeTest.main(SerializeTest.java:140)


Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: tiger-beta2 FIXED IN: tiger-beta2 INTEGRATED IN: tiger-b43 tiger-beta2
24-08-2004

SUGGESTED FIX Name: azR10139 Date: 12/18/2003 ------- AbstractButton.java ------- *** /tmp/sccs.mGaWRO Tue Dec 16 18:51:17 2003 --- AbstractButton.java Tue Dec 16 18:46:12 2003 *************** *** 1154,1160 **** return new ButtonActionPropertyChangeListener(this, a); } ! private static class ButtonActionPropertyChangeListener extends AbstractActionPropertyChangeListener { ButtonActionPropertyChangeListener(AbstractButton b, Action a) { super(b, a); } --- 1154,1162 ---- return new ButtonActionPropertyChangeListener(this, a); } ! private static class ButtonActionPropertyChangeListener ! extends AbstractActionPropertyChangeListener ! implements Serializable { ButtonActionPropertyChangeListener(AbstractButton b, Action a) { super(b, a); } ------- JMenuItem.java ------- *** /tmp/sccs.RKaiSO Tue Dec 16 18:51:18 2003 --- JMenuItem.java Tue Dec 16 18:45:11 2003 *************** *** 367,373 **** } private static class MenuItemPropertyChangeListener ! extends AbstractActionPropertyChangeListener { MenuItemPropertyChangeListener(JMenuItem m, Action a) { super(m, a); --- 367,374 ---- } private static class MenuItemPropertyChangeListener ! extends AbstractActionPropertyChangeListener ! implements Serializable { MenuItemPropertyChangeListener(JMenuItem m, Action a) { super(m, a); ======================================================================
24-08-2004

EVALUATION The stack trace points to JMenuItem.MenuItemPropertyChangeListener as not being serializable. Passing to owner of menu items to investigate. ###@###.### 2003-12-12 Name: azR10139 Date: 12/18/2003 The reason of this exception is that all the classes, derived from the AbstractButton class and created of configured by an Action have internal PropertyChangeListener, which is not serializable. The idea of suggested fix is to make those listeners serializable. ###@###.### 12/18/2003 ======================================================================
18-12-2003