<Swing Dev> [12] RFR JDK-8192888: AllSwingComponentsBaselineTest fails with NullPointerException for NimbusLookAndFeel

Prasanta Sadhukhan prasanta.sadhukhan at oracle.com
Wed Oct 31 15:45:03 UTC 2018



On 31-Oct-18 9:06 PM, Sergey Bylokhov wrote:
> On 31/10/2018 03:19, Prasanta Sadhukhan wrote:
>> I tested on windows 10 and mac10.13 and the test passed. Not sure why 
>> it will fail on mach5 system. It complains about NPE which can be 
>> checked and prevented but am not seeing it locally so should I fix it 
>> blindly?
>
> Is it possible that the reason in the headless mode which is used in 
> mach5? note that this is not necessary a test issue.
>
I can add @key headful if that is what is needed for the test!!!
>>
>> Regards
>> Prasanta
>> On 31-Oct-18 3:04 AM, Sergey Bylokhov wrote:
>>> Hi, Prasanta.
>>> Looks like this test started to fail on our mach5 systems, please 
>>> take a look.
>>>
>>> On 22/10/2018 11:39, Sergey Bylokhov wrote:
>>>> Hi, Prasanta.
>>>> Thank you for investigation, the fix looks fine.
>>>>
>>>> On 21/10/2018 22:52, Prasanta Sadhukhan wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> I saw that in *ButtonUI class for all lookandfeels, we are caching 
>>>>> the ui object and returning
>>>>> AquaButtonUI - createUI() caches buttonUI via 
>>>>> RecyclableSingletonFromDefaultConstructor<AquaButtonUI>(AquaButtonUI.class) 
>>>>> which is returned everytime.
>>>>> MotifButtonUI - createUI() caches in the same way as this fix
>>>>> BasicButtonUI - createUI() caches in the same way as this fix
>>>>> MetalButtonUI - createUI() caches in the same way as this fix
>>>>> WindowsButtonUI - createUI() caches in the same way as this fix
>>>>>
>>>>> so I guess we should do the same for SynthButtonUI too as has been 
>>>>> done in webrev.2 below.
>>>>>
>>>>> Regards
>>>>> Prasanta
>>>>> On 15-Sep-18 5:39 AM, Sergey Bylokhov wrote:
>>>>>> Hi, Prasanta.
>>>>>> I have checked some other UI delegates(in Synth and others L&F), 
>>>>>> and found that sometimes result of createUI is cached, but 
>>>>>> sometimes not. Can you please describe some logic when to use or 
>>>>>> not to use cache?
>>>>>>
>>>>>> On 13/09/2018 00:20, Prasanta Sadhukhan wrote:
>>>>>>> Yes. So, it seems getBaseline() gets null style because of this 
>>>>>>> reason:
>>>>>>>
>>>>>>> When JButton is created, it calls JButton.updateUI() which calls 
>>>>>>> UIManager.updateUI() which calls UIDefaults.getUI and it calls 
>>>>>>> SynthButtonUI.createUI() which created a new SynthButtonUI 
>>>>>>> everytime. SynthButtonUI.installDefaults() updates the style for 
>>>>>>> this SynthButtonUI object.
>>>>>>>
>>>>>>> But in testcase, we again call UIManager.getUI(JButton) which 
>>>>>>> again triggers the same flow culminating in 
>>>>>>> SynthButtonUI.createUI which creates a new SynthButtonUI object 
>>>>>>> with null style.
>>>>>>>
>>>>>>> Like in other look and feel ButtonUI for ex, MetalButtonUI, 
>>>>>>> WindowsButtonUI, createUI should be updated not to create a new 
>>>>>>> object everytime but to cache the object in appcontext and 
>>>>>>> retrieves that instead of recreating everytime.
>>>>>>> Modified webrev: 
>>>>>>> http://cr.openjdk.java.net/~psadhukhan/8192888/webrev.2/
>>>>>>>
>>>>>>> Regards
>>>>>>> Prasanta
>>>>>>> On 13-Sep-18 1:18 AM, Sergey Bylokhov wrote:
>>>>>>>> On 11/09/2018 22:03, Prasanta Sadhukhan wrote:
>>>>>>>>>> Why SynthLookAndFeel.updateStyle() which is called in 
>>>>>>>>>> SynthButtonUI.updateStyle(AbstractButton b) did not update 
>>>>>>>>>> the context which is passed to it? Is it possible that 
>>>>>>>>>> SynthButtonUI.installDefaults() was not called before 
>>>>>>>>>> getBaseline()?
>>>>>>>>>>
>>>>>>>>> SynthButtonUI.updateStyle() called from 
>>>>>>>>> SynthButtonUI.installDefaults() creates a new context whereas 
>>>>>>>>> in getBaseline() we again calls getContext() in l207 which 
>>>>>>>>> creates a new SynthContext, so the style was not updated to 
>>>>>>>>> the context currently being queried in getBaseline()
>>>>>>>>
>>>>>>>> SynthButtonUI.updateStyle() creates a new context and at the 
>>>>>>>> same time updates the "SynthStyle.style", so the new 
>>>>>>>> SynthContext created in getBaseline() should use non-null 
>>>>>>>> "SynthStyle.style", no?
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>
>



More information about the swing-dev mailing list