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.

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

Commit messages:
 - 8359428: Test 'javax/swing/JTabbedPane/bug4499556.java' failed because after 
selecting one of L&F items, the test case automatically failed when clicking on 
L&F Menu button again

Changes: https://git.openjdk.org/jdk/pull/25822/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25822&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8359428
  Stats: 3 lines in 1 file changed: 1 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/25822.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25822/head:pull/25822

PR: https://git.openjdk.org/jdk/pull/25822

Reply via email to