我实现了一个自定义表模型,如下所示:

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/

10-13 03:41