文档监听器带来空指针异常
Document listener brings a null pointer exception
我使用了一个文档侦听器,它给我带来了一个空指针异常。我怎么能阻止这个例外。我用它来搜索 table 的一些内容。通过使用它我可以搜索相关内容。这也给我带来了空指针异常。
这些是步骤,
一开始,
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());
}
我把我得到这个空指针异常的地方加粗了。
有什么想法吗?
您的 column
变量很可能为空。如果 table 中至少有一个单元格为空,就会出现这种情况。此外,由于 originalTableModel
在构造函数中被视为 table 模型的克隆,因此在 searchTableContents
为 运行 之前的任何更改都不会反映出来在 originalTableModel
。
要修复它,您应该将 if 更改为 if (column != null && column.toString().toLowerCase().contains(searchString.toLowerCase()))
。
我使用了一个文档侦听器,它给我带来了一个空指针异常。我怎么能阻止这个例外。我用它来搜索 table 的一些内容。通过使用它我可以搜索相关内容。这也给我带来了空指针异常。
这些是步骤,
一开始,
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());
}
我把我得到这个空指针异常的地方加粗了。
有什么想法吗?
您的 column
变量很可能为空。如果 table 中至少有一个单元格为空,就会出现这种情况。此外,由于 originalTableModel
在构造函数中被视为 table 模型的克隆,因此在 searchTableContents
为 运行 之前的任何更改都不会反映出来在 originalTableModel
。
要修复它,您应该将 if 更改为 if (column != null && column.toString().toLowerCase().contains(searchString.toLowerCase()))
。