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

DefaultTableCellRenderer.getTableCellRendererComponent() throws unexpected NPE

XMLWordPrintable

      FULL PRODUCT VERSION :
      java version "1.5.0_04"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_04-b05)
      Java HotSpot(TM) Client VM (build 1.5.0_04-b05, mixed mode, sharing)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      OS- and configuration-independent

      A DESCRIPTION OF THE PROBLEM :
      According to the TableCellRenderer interface spec, null is a legal table argument for getTableCellRendererComponent().
      javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(), however, throws an NPE when given a null table.

      As a result, TableColumn.sizeWidthToFit() fails with an NPE if a DefaultTableCellRenderer has been set as header renderer.
      This is because sizeWidthToFit() asks the column header renderer for the renderer component to get its preferred width, but, not having access to the enclosing table, passes a null value for the table argument.

      This seems to be a duplicate of bug 4117059 (of 1998!), which has reportedly been fixed long ago, but was apparently re-introduced at some point.


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run the attached code snippet

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Silent completion of the main() method
      ACTUAL -
      See attached NPE stacktrace

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Exception in thread "main" java.lang.NullPointerException
      at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:148)
      at javax.swing.table.TableColumn.sizeWidthToFit(TableColumn.java:650)
      at SizeWidthToFitSnippet.main(SizeWidthToFitSnippet.java:13)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import javax.swing.JTable;
      import javax.swing.table.DefaultTableCellRenderer;
      import javax.swing.table.TableColumn;

      public class SizeWidthToFitSnippet {

      public static void main(String[] args) {
      JTable table = new JTable(1, 1);
      TableColumn column = table.getColumnModel().getColumn(0);
      column.setHeaderRenderer(new DefaultTableCellRenderer());
      column.sizeWidthToFit();
      }

      }

      ---------- END SOURCE ----------

            shickeysunw Shannon Hickey (Inactive)
            mlapshin Mikhail Lapshin (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: