On Mon, 16 Jun 2025 09:21:24 GMT, Prasanta Sadhukhan <psadhuk...@openjdk.org> 
wrote:

> It is seen that this test (which was opensourced in 
> [JDK-8353304](https://bugs.openjdk.org/browse/JDK-8353304)) when run with 
> NimbusLookAndFeel, after selecting one of L&F items, the test case 
> automatically failed when clicking on L&F Menu button again.
> It is because while switching to another L&F say platform(WindowsL&F) from 
> Metal/Nimbus LookAndFeel, if testcase was originally run in Nimbus L&F, 
> `SynthMenuItemLayoutHelper()` calls `MenuItemLayoutHelper.reset`  where 
> `style.getFont(context) `return null font so when it calls 
> `getFontMetrics(font)` it calls `font.hashCode `which fails with 
> 
>> Execution failed: `main' threw exception: java.lang.NullPointerException: 
>> Cannot invoke "java.awt.Font.hashCode()" because "font" is null 
> 
> This is happening because the test calls 
> `SwingUtilities.updateComponentTreeUI `on tabbedpane.
> So, when L&F is changed inside the test  via "L&F Menu" option 1st time say 
> Metal to Platform, it changes the L&F of the tabbed pane to Windows L&F, but 
> not for the "L&F Menu" font itself which is still in Nimbus L&F, but style 
> context is reset so when next time "L&F Menu" is clicked to change the L&F,  
> SynthMenuItemLayoutHelper gets null font from invalid context and then it 
> crashes.
> Fix is to ensure the `updateComponentTreeUI `should be for entire frame which 
> consists of "L&F Menu" and the tabs so L&F is changed consistently for all 
> nodes.

Verified the fix on mac machine and it behaves correct with the fix.

-------------

Marked as reviewed by abhiscxk (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/25822#pullrequestreview-2937725298

Reply via email to