0

我使用文檔偵聽器,它給我帶來了空指針異常。我怎麼能阻止這個異常。我用它來搜索表格的一些內容。通過使用這個我可以搜索相關的內容。這也給我帶來了一個空指針異常。文檔偵聽器帶來空指針異常

這些步驟,

在開始的時候,

Vector originalTableModel; 
DocumentListener documentListener; 

在counstructor,

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()); 
} 

我大膽的在那裏我得到了這個空指針異常點。

有什麼想法嗎?

+0

可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – Marcinek

+0

調試這一行,並查看哪個變量爲空。我猜這是「searchString」 – Marcinek

+0

@Marcinek: - 那麼我能做些什麼來恢復它? – Barrier

回答

1

很可能您的column變量爲空。如果表格中至少有一個單元格爲空,則會出現這種情況。此外,因爲originalTableModel被視爲構造函數中表模型的克隆,所以在運行時間爲searchTableContents之前的任何更改都不會反映在originalTableModel中。

要解決該問題,您應該將if更改爲if (column != null && column.toString().toLowerCase().contains(searchString.toLowerCase()))

+0

你是什麼意思的「&& ...」? – Barrier

+0

我做到了,它爲我工作。非常感謝 。 – Barrier