<AWT Dev> [10] Review request for 8189201: [macosx] NotSerializableException during JFrame with MenuBar serialization

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Tue Nov 7 18:21:36 UTC 2017


On 07/11/2017 08:48, Semyon Sadetsky wrote:
>> But from the other point of view all our listeners like 
>> "componentListener", "keyListener" etc are transient and have some 
>> special steps in Component.writeObject().
> Yes, it may be necessary to to do something with propertyListenersCount 
> in writeObject() as well. But this may change the format compatibility. 
> I have created a separate bug to investigate this: 
> https://bugs.openjdk.java.net/browse/JDK-8190867

But it does not explain why other containers for listeners marked as 
transient. I guess the reason is in this part of spec in 
Component.writeObject():
      * Writes default serializable fields to stream.  Writes
      * a variety of serializable listeners as optional data.
      * The non-serializable listeners are detected and
      * no attempt is made to serialize them.

This is why all of them marked as transient and during serialization we 
iterates over them and save only listeners which implements Serializable 
interface.

> 
> --Semyon
>>
>> On 31/10/2017 09:05, Semyon Sadetsky wrote:
>>> The updated webrev: 
>>> http://cr.openjdk.java.net/~ssadetsky/8189201/webrev.02/
>>>
>>>
>>> On 10/23/2017 01:54 PM, Semyon Sadetsky wrote:
>>>> Actually ScreenMenu is fully removed in uninstallUI() (line 54 of 
>>>> AquaMenuBarUI), so there is no need to make its property listener 
>>>> Serializable, please, ignore the change in ScreenMenuPropertyListener.
>>>>
>>>> --Semyon
>>>>
>>>>
>>>> On 10/23/2017 01:25 PM, Semyon Sadetsky wrote:
>>>>> On 10/23/2017 12:58 PM, Sergey Bylokhov wrote:
>>>>>
>>>>>> On 23/10/2017 12:41, Semyon Sadetsky wrote:
>>>>>>>> The AquaMenuBarBorder class is L&F specific, and it should not 
>>>>>>>> be serialized/deserialized. Such information(plus l&f client 
>>>>>>>> properties/listeners/etc) should be removed from the component 
>>>>>>>> before serialization. And during deserialization the L&F of the 
>>>>>>>> target system should be applied.
>>>>>>> That is valid concern. The webrev is updated 
>>>>>>> http://cr.openjdk.java.net/~ssadetsky/8189201/webrev.01/
>>>>>>
>>>>>> The same is applicable to ScreenMenuPropertyListener as well 
>>>>>> because it is also L&F specific.
>>>>>> I assume that the changes in AccessibleAWTComponentHandler/etc are 
>>>>>> necessary because somecode installs the listeners on the 
>>>>>> components, since the bug is not reproduced in Metal I assume that 
>>>>>> this listeners are installed by Aqua, in this case these listeners 
>>>>>> also should be removed from the component before serialization.
>>>>> ScreenMenu is not a Swing component.
>>>>>
>>>>> --Semyon
>>>>>
>>>>
>>>
>>
>>
> 


-- 
Best regards, Sergey.


More information about the awt-dev mailing list