gpt4 book ai didi

java - 来自 getAccessibleChild() 方法的 JTable 奇怪行为导致客户端代码中出现空指针

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:16 24 4
gpt4 key购买 nike

我遇到了 JTable (JDK 1.5_22) 的奇怪行为:
在表格中的选择发生变化后,在某些未知的特定情况下,JTable 将调用单元格渲染器,并将值参数设置为“null”。
这最终将导致在尚未准备好进行此类粗鲁调用的自定义渲染器代码上出现一个不错的“空指针异常”。

这是有罪的方法(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));
}
}

这里是错误陈述的重点:

Component component = renderer.getTableCellRendererComponent(
JTable.this, null, false, false,
row, column);

向谷歌询问“JTable getAccessibleChild 5334”很有趣:我不是唯一遇到此“功能”的人。但没有任何回应。

最完善的问题位于 on official sun forum .

有人知道这件事吗?

最佳答案

这不是同步或 EDT 问题。 JTable 中的代码使用空值显式调用 getTableCellRendererComponent

返回的值从未使用过,因此,从表面上看,它更像是旧的调试代码。但是我怀疑它不会破坏期望在访问单元格之前调用 getTableCellRendererComponent 的代码。

Sun 之前曾就此问题求助过,他们的回答是 API 不保证 value 为非空,因此 getTableCellRendererComponent 在调用时必须优雅地失败一个空值。

关于java - 来自 getAccessibleChild() 方法的 JTable 奇怪行为导致客户端代码中出现空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com