JDK-7055065 : Regression : JDK 7 : NullPointerException when sorting JTable with empty cell
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 7
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2011-06-15
  • Updated: 2013-06-26
  • Resolved: 2012-05-09
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 7 JDK 8
7u40Fixed 8 b38Fixed
Description
SYNOPSIS
--------
NullPointerException when sorting JTable with empty cell

OPERATING SYSTEM
----------------
Reported on RHEL5.1
Reproducible on Windows.
Likely platform independent.

FULL JDK VERSION
----------------
JDK 7 (tested with b144)
Not reproducible with Java 6

REPRODUCTION INSTRUCTIONS
-------------------------
1. Launch SwingSet2 with jar as follows:
    java -jar %JAVA_HOME%/demo/jfc/SwingSet2/SwingSet2.jar

2. Click JTableDemo Tab and double click on a cell in the "Favorite
 Number" column and delete the value.

3. Click on the column headers to sort the table.

Expected result:
No Exceptions should be thrown.

Observed result:
The following NullPointerException stack trace is printed on the console:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
      at javax.swing.JTable.columnMoved(JTable.java:4578)
      at javax.swing.table.DefaultTableColumnModel.fireColumnMoved(DefaultTableColumnModel.java:580)
      at javax.swing.table.DefaultTableColumnModel.moveColumn(DefaultTableColumnModel.java:190)
      at javax.swing.plaf.basic.BasicTableHeaderUI$MouseInputHandler.setDraggedDistance(BasicTableHeaderUI.java:293)
      at javax.swing.plaf.basic.BasicTableHeaderUI$MouseInputHandler.mouseReleased(BasicTableHeaderUI.java:263)
      at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
      at java.awt.Component.processMouseEvent(Component.java:6504)
      at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
      at java.awt.Component.processEvent(Component.java:6269)
      at java.awt.Container.processEvent(Container.java:2229)
      at java.awt.Component.dispatchEventImpl(Component.java:4860)
      at java.awt.Container.dispatchEventImpl(Container.java:2287)
      at java.awt.Component.dispatchEvent(Component.java:4686)
      at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
      at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
      at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
      at java.awt.Container.dispatchEventImpl(Container.java:2273)
      at java.awt.Window.dispatchEventImpl(Window.java:2713)
      at java.awt.Component.dispatchEvent(Component.java:4686)
      at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
      at java.awt.EventQueue.access$000(EventQueue.java:101)
      at java.awt.EventQueue$3.run(EventQueue.java:666)
      at java.awt.EventQueue$3.run(EventQueue.java:664)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
      at java.awt.EventQueue$4.run(EventQueue.java:680)
      at java.awt.EventQueue$4.run(EventQueue.java:678)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
      at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
      at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Comments
EVALUATION The problem is in the SwingSet2 demo. I can't reproduce the same NPE, but I get another one: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at TableDemo$16.getColumnClass(TableDemo.java:552) at javax.swing.JTable.getColumnClass(JTable.java:2667) at javax.swing.JTable.getCellRenderer(JTable.java:5671) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2071) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143) The following code doesn't take into account that the JTable can be edited: public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
16-06-2011

EVALUATION transferring to classes_swing.
16-06-2011