有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中JTable中的swing-remove元素

我想建立一个小游戏,这将是一个JTable与一些值和JTextField以上的表格,用户应该在文本字段中键入任何值,如果它存在于表格中,它将删除,如果它不存在,用户将得到消息, 我试图删除用户在文本字段中写入的值,并编写了以下代码:

String value = txt_num.getText();
for (int i = 0; i < table.getRowCount(); i++) {                       
    for (int j = 0; j < table.getColumnCount(); j++) {              
        if (tbl.getModel().getValueAt(i, j).toString().equals(value)) {
            tbl.setValueAt(null, i, j);
        } else {
                JOptionPane.showMessageDialog(null, "Value isn't exist");
         }
    }
}

此代码正确删除,但删除了输入的第一个值,但当我输入另一个值时,出现以下错误:

enter image description here

我如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    首先你需要了解NullPointerException到底是什么,以及为什么会发生@尤尔的评论会对你有所帮助

    关于你的问题,问题在这里的if条款中:

    if (tbl.getModel().getValueAt(i, j).toString().equals(value)) {
    

    这是第一次工作,因为getValueAt返回一个有效的对象,您可以在其中执行toString。但是,在将表中单元格的值设置为null并再次尝试相同的操作之后,将从getValueAt返回null,并尝试对null对象执行toString方法。这当然不起作用,并导致您显示的错误

    解决方案是:

    在尝试将返回值转换为字符串之前,实现一些逻辑来检查返回值是否为null。 例如:

    if ((tbl.getModel().getValueAt(i,j) != null) && (tbl.getModel().getValueAt(i, j).toString().equals(value))) {
    

    或者,如果要删除该值,请不要将其设置为null,但可以将其设置为""