文档侦听器带来空指针异常

时间:2016-01-20 09:22:51

标签: java nullpointerexception jtable jtextfield documentlistener

我使用文档侦听器,它带来了一个空指针异常。我怎么能阻止这个例外。我用它来搜索表格的一些内容。使用这个我可以搜索相关内容。这也带来了一个空指针异常。

这些是步骤,

一开始,

Vector originalTableModel;
DocumentListener documentListener;

在结构者中,

originalTableModel = (Vector) ((DefaultTableModel) list_table.getModel()).getDataVector().clone();
//add document listener to jtextfield to search contents as soon as something typed on it
addDocumentListener();

我的documentlistener方法,

private void addDocumentListener(){
   documentListener = new DocumentListener(){
      public void changedUpdate(DocumentEvent documentEvent){
           search();
      }

      public void insertUpdate(DocumentEvent documentEvent){
           search();
      }

      public void removeUpdate(DocumentEvent documentEvent){
           search();
      }

      private void search(){
           searchTableContents(search_field.getText());
      }

   };
}

我的搜索方法,

public void searchTableContents(String searchString)
{
    DefaultTableModel currtableModel = (DefaultTableModel) list_table.getModel();
    //To empty the table before search
    currtableModel.setRowCount(0);
    //To search for contents from original table content
    for (Object rows : originalTableModel)
    {
        Vector rowVector = (Vector) rows;
        for (Object column : rowVector)
        {

                if **(column.toString().toLowerCase().contains(searchString.toLowerCase())**)
                {

                    //content found so adding to table
                    currtableModel.addRow(rowVector);
                    break;
                }


        }
    }
}

这是我调用此方法的地方,

private void search_fieldKeyReleased(java.awt.event.KeyEvent evt)                                                      
{                                                          
    // TODO add your handling code here:
    searchTableContents(search_field.getText());
}

我粗略地说明了我的空指针异常。

有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您的column变量很可能为空。如果表中至少有一个单元格为空,则会出现这种情况。此外,由于originalTableModel被视为构造函数中表模型的克隆,因此在执行克隆之前所做的任何更改都将不会反映在searchTableContentsoriginalTableModel

要解决此问题,您应将if更改为if (column != null && column.toString().toLowerCase().contains(searchString.toLowerCase()))