<Swing Dev> 7189299 DefaultButtonModel instance keeps stale listeners of JButton in case of multiple SwingUtilities.updateComponentTreeUI() calls
Pavel Porvatov
pavel.porvatov at oracle.com
Thu Sep 13 11:50:02 UTC 2012
Hi Frank,
> Hi Pavel
> It's been a long time since last discussion. Now I have a new
> approach to the issue.
> The basic idea is removing the listener pertaining to JButton
> instance from DefaultButtonModel when the corresponding FormView
> instance is about to retire.
>
> The best place I can find in source code to achieve it is in
> FormView's super class ComponentView, method void setComponentParent.
> View p = getParent();
> if (p != null) {
> ....
> } else {
> // when p is null, it means the FormView instance is about to retire
> // deregister listener off shared DefaultButtonModel instance
> }
>
> However, the biggest problem is that the listener to be removed is a
> private member of AbstractButton and the only way is holding the
> listener object and then calling various removeXXXListener on
> DefaultButtonModel with the listener being parameter. I have to
> resort to reflection which makes it look more like a workaround.
> What's more, reflection introduces implementation dependency.
> In addition to the change to fix, I also updated its jtreg test case
> according to your comments.
> Could you please review it again @
> http://cr.openjdk.java.net/~dingxmin/7189299/webrev.02
We don't use reflection in the SWING library. Could you please try to
find another way of fix?
Regards, Pavel
>
> Thanks,
> Frank
>
>
> On 8/16/2012 12:19 AM, Pavel Porvatov wrote:
>> 1. Could you name the test from lower case? There is no strict rules
>> for that, but most tests starts from "bug..."
>> 2. You should use the SunToolkit.realSync method to be sure that
>> frame became visible. Take a look in other test, e.g.
>> test/javax/swing/JPopupMenu/7156657
>> 3. You can reduce code and put try/finally block into single
>> SwingUtilities.invokeAndWait
>> 4. About the fix: you are removing ALL listeners from public model.
>> That can lead to regressions and this behavior is not expected from
>> users.
>>> The regression mark was a mistake. If possible, could you clear
>>> regression status?
>> Ok, I removed the regression keyword
>>>
>>> http://cr.openjdk.java.net/~dingxmin/7189299/webrev.01/
>>>
>>> Please review the new one. Thanks
>>>
>>> Best regards,
>>> Frank
>>>
>>
>
More information about the swing-dev
mailing list