title: validate() tree throws NullPointerException on L&F change?
body: <pre><code>public class TabbedArea extends JTabbedPane {
    public void addArea(){
      add(component);
      final JPanel panel = new JPanel(new BorderLayout());
      panel.add(new JLabel(title), BorderLayout.LINE_START);
      JButton closeButton = new JButton(new CloseIcon());
      closeButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          removeArea(subAreas.get(indexOfTabComponent(panel)));
        }
      });
      panel.add(closeButton, BorderLayout.LINE_END);
  
      setTabComponentAt(getTabCount() - 1, panel);
    }
  }
  
  public class LnFManager {
    public void setTheme(PlasticTheme theme){
      for (Window window : Window.getWindows()) {
        if (window.isDisplayable())
          SwingUtilities.updateComponentTreeUI(window);
      }
    }
  }
  </code></pre>
  
  <p>When setTheme() is called, this causes this to occur repeatedly (presumably for each component):</p>
  
  <pre><code>Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
   at javax.swing.plaf.basic.BasicTabbedPaneUI.scrollableTabLayoutEnabled(BasicTabbedPaneUI.java:263)
   at javax.swing.plaf.basic.BasicTabbedPaneUI.access$400(BasicTabbedPaneUI.java:54)
   at javax.swing.plaf.basic.BasicTabbedPaneUI$TabContainer.doLayout(BasicTabbedPaneUI.java:3850)
   at java.awt.Container.validateTree(Container.java:1568)
   at java.awt.Container.validateTree(Container.java:1575)
   at java.awt.Container.validateTree(Container.java:1575)
   at java.awt.Container.validateTree(Container.java:1575)
   at java.awt.Container.validateTree(Container.java:1575)
   at java.awt.Container.validate(Container.java:1540)
   at javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1227)
   at flextrade.tca.ui.LnFManager.setTheme(LnFManager.java:113)
   at flextrade.tca.ui.ToolBar$15.actionPerformed(ToolBar.java:803)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
   at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308)
   at javax.swing.AbstractButton.doClick(AbstractButton.java:374)
   at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:829)
   at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:873)
   at java.awt.Component.processMouseEvent(Component.java:6108)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
   at java.awt.Component.processEvent(Component.java:5873)
   at java.awt.Container.processEvent(Container.java:2105)
   at java.awt.Component.dispatchEventImpl(Component.java:4469)
   at java.awt.Container.dispatchEventImpl(Container.java:2163)
   at java.awt.Component.dispatchEvent(Component.java:4295)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
   at java.awt.Container.dispatchEventImpl(Container.java:2149)
   at java.awt.Window.dispatchEventImpl(Window.java:2478)
   at java.awt.Component.dispatchEvent(Component.java:4295)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
  </code></pre>
  
  <p>Commenting out the line 'setTabComponentAt(getTabCount() - 1, panel);' stops the exception from being thrown (but this, of course, breaks the UI), as does overriding updateUI() in the TabbedArea class and wrapping super.updateUI() in SwingUtilities.invokeLater(..).</p>
  
  <p>This appears to be similar to a <a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=2600457&amp;group_id=588&amp;atid=565475" rel="nofollow">bug</a> that the jEdit team had with one of their plugins when updating the L&amp;F. However, their <a href="http://jedit.svn.sourceforge.net/viewvc/jedit/plugins/MetalColor/trunk/metalcolor/MetalColorPlugin.java?r1=14783&amp;r2=14782&amp;pathrev=14783" rel="nofollow">solution</a> was simply to not update the application's look and feel during runtime and to rely on a restart to do it.</p>
  
  <p>Anyone have any ideas how this can be solved without needing a restart to change the look and feel?</p>