Duplicate :
|
|
Relates :
|
|
Relates :
|
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 ----------
|