我实现了一个自定义表模型,如下所示:
public class MyTableModel extends AbstractTableModel {
...
...
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
...
...
}
当我显示具有上述TableModel的JTable时,上述方法抛出NullPointerException。
我认为异常是由于数据库表中的一些空白单元格所致。
如果异常是由于数据库表中的单元格为空,那么该如何解决该问题?
不是强制数据库中的每个列都具有一定的值。有些列不能包含任何内容。
最佳答案
如果单元格可以包含空值,那么对空值调用getClass()肯定会给您NPE。当然,您可以检查是否为空,但是真正的问题比那更微妙。
TableModel接口指定getColumnClass(int)应该返回“列中所有单元格值的最特定的超类”。从外观上看,您可能会为单个列返回任意数量的类类型,从而有效地打破了TableModel契约。
通常,列类型对于给定的一组表数据是静态的,这意味着除非基础表数据已更改,否则列的类不应更改。我认为重要的是要问为什么需要返回这样的特定值。
如果要呈现特定于给定类类型的内容,最好滚动自己的TableCellRenderer并根据每个单元确定对象类型。从那里,您可以根据需要进行任何特定的渲染。
关于java - 在JAVA中实现AbstractTableModel时发生异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2202504/