Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6509786

Bug 5049957 regressed, XP L&F crashes if user hotswaps XP theme

XMLWordPrintable

      The bug 5049957 appears to still be present. I have confirmed that the following code from an external reporter still exhibits this bug, or at least what appears to be this bug.

      OK, here is the code. Simply run this application on a Windows XP machine and then change the XP theme. A NPE will be thrown.

      [code]
      import java.awt.BorderLayout;
      import java.awt.Component;
      import java.awt.EventQueue;
      import javax.swing.JFrame;
      import javax.swing.JScrollPane;
      import javax.swing.JTable;
      import javax.swing.UIManager;
      import javax.swing.UnsupportedLookAndFeelException;
      import javax.swing.table.JTableHeader;
      import javax.swing.table.TableCellRenderer;
      import javax.swing.table.TableColumnModel;
      import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;

      public class NPETest extends JFrame
      {
      private JTable table;
      private JScrollPane pane;

      private class HeaderRenderer implements TableCellRenderer
      {
      private TableCellRenderer tableCellRenderer;

      public HeaderRenderer(TableCellRenderer tableCellRenderer)
      {
      this.tableCellRenderer = tableCellRenderer;
      }

      public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus,int row, int column)
      {
      Component c = tableCellRenderer.getTableCellRendererComponent(table,
      value, isSelected, hasFocus, row, column);
      return c;
      }
      }

      class MyHeader extends JTableHeader
      {
      public MyHeader(TableColumnModel model)
      {
      super(model);
      setDefaultRenderer(new HeaderRenderer(getDefaultRenderer()));
      }
      }

      public NPETest()
      {
      try
      {
      UIManager.setLookAndFeel(new WindowsLookAndFeel());
      }
      catch (UnsupportedLookAndFeelException ulafe)
      {
      }
      Object[][] data = new Object[][] {{1, 2, 3, 4, 5, 6},
      {2, 4, 8, 9, 5, 7},
      {3, 1, 6, 5, 3, 2},
      {4, 6, 6, 7, 6, 8}};
      String[] colNames = new String[] {"A", "B", "C", "D", "E", "F"};
      setLayout(new BorderLayout());
      pane = new JScrollPane();
      table = new JTable(data, colNames);
      table.setTableHeader(new MyHeader(table.getColumnModel()));
      pane.setViewportView(table);
      add(pane, BorderLayout.CENTER);
      pack();
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }

      /**
      * @param args
      */
      public static void main(String[] args)
      {
      EventQueue.invokeLater(new Runnable()
      {
      public void run()
      {
      new NPETest().setVisible(true);
      }
      });
      }
      }
      [/code]

      It produces the following stack trace in the latest version of Java 6 available from java.sun.com when switching the theme in Windows XP Pro, SP 2.

      java.lang.NullPointerException
              at com.sun.java.swing.plaf.windows.WindowsTableHeaderUI$XPDefaultRenderer.paint(WindowsTableHeaderUI.java:95)
              at javax.swing.CellRendererPane.paintComponent(CellRendererPane.java:134)
              at javax.swing.plaf.basic.BasicTableHeaderUI.paintCell(BasicTableHeaderUI.java:665)
              at javax.swing.plaf.basic.BasicTableHeaderUI.paint(BasicTableHeaderUI.java:607)
              at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
              at javax.swing.JComponent.paintComponent(JComponent.java:758)
              at javax.swing.JComponent.paint(JComponent.java:1022)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JViewport.paint(JViewport.java:747)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1026)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1026)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paint(JComponent.java:1031)
              at javax.swing.JLayeredPane.paint(JLayeredPane.java:564)
              at javax.swing.JComponent.paintChildren(JComponent.java:859)
              at javax.swing.JComponent.paintToOffscreen(JComponent.java:5111)
              at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
              at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
              at javax.swing.JComponent.paint(JComponent.java:1008)
              at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
              at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
              at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
              at java.awt.Container.paint(Container.java:1797)
              at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:734)
              at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
              at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
              at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
              at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
              at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
              at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
              at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

            idk Igor Kushnirskiy (Inactive)
            jmarinacsunw Joshua Marinacci (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: