Gui*_*ume 3 java swing jtable nullpointerexception
我在JTable(JDK 1.5_22)中遇到了一个奇怪的行为:
在表中选择更改并且在某些未知的特定情况下,JTable将使用'null'为value参数调用单元格渲染器.
这最终将在自定义渲染器代码上导致一个不错的"空指针异常",而这些代码还没有为这种粗鲁的调用做好准备.
这是有罪的方法(JTable.java,第5319行):
public Accessible getAccessibleChild(int i) {
if (i < 0 || i >= getAccessibleChildrenCount()) {
return null;
} else {
// children increase across, and then down, for tables
// (arbitrary decision)
int column = getAccessibleColumnAtIndex(i);
int row = getAccessibleRowAtIndex(i);
TableColumn aColumn = getColumnModel().getColumn(column);
TableCellRenderer renderer = aColumn.getCellRenderer();
if (renderer == null) {
Class<?> columnClass = getColumnClass(column);
renderer = getDefaultRenderer(columnClass);
}
Component component = renderer.getTableCellRendererComponent(
JTable.this, null, false, false,
row, column);
return new AccessibleJTableCell(JTable.this, row, column,
getAccessibleIndexAt(row, column));
}
}
Run Code Online (Sandbox Code Playgroud)
这里是关注错误的陈述:
Component component = renderer.getTableCellRendererComponent(
JTable.this, null, false, false,
row, column);
Run Code Online (Sandbox Code Playgroud)
问谷歌蒙特"JTable getAccessibleChild 5334"很有意思:我并不是唯一一个遇到这个"功能"的人.但没有答案.
最完美的问题是在官方太阳论坛上.
有没有人对此有所了解?
这不是同步或EDT问题.代码中JTable
显式调用getTableCellRendererComponent
null值.
返回的值从未使用过,因此,从表面上看,它看起来像旧的调试代码.但是我怀疑它是否存在不会破坏期望getTableCellRendererComponent
在访问单元格之前调用的代码.
Sun之前已经调用过这个问题,他们的回答是API不保证value
非null,因此getTableCellRendererComponent
在使用null调用时必须优雅地失败.