我编写了一些在 JLabel 上设置图像的代码。 Image 的路径是通过 JList 上所选项目的 getSelectedValue() 方法获取的。
当用户从 JComboBox(即 typeChooserBox)中的三个项目中选择任何选项后,通过在 JTextField(即 searchTextField)中键入要搜索的项目来单击搜索按钮时,将填充 Jlist。然后我的程序从文件“Records.txt”中读取保存的记录,并分解为标记以将正确的标记(基于 typeChooserBox 的索引)与用户输入值(在 searchTextField 中)进行比较。然后它填充 JList。
下面是填充 JList 的搜索按钮的事件处理程序。
public class searchButtonListener implements ActionListener{
public void actionPerformed(ActionEvent ev){
model.clear();//This empties the JList creating nullpoint Ex
int index=typeChooserBox.getSelectedIndex();
String toCompare=searchTextField.getText();
try {
File file = new File("Records.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line=null;
while((line=reader.readLine())!=null){
String[] tokens = line.split("/");
if( index==0){
if(tokens[0].equals(toCompare))
model.addElement(tokens[2]);}
if(index==1){
if(tokens[1].equalsIgnoreCase(toCompare))
model.addElement(tokens[2]);}
if(index==2){
if(tokens[3].contains(toCompare))
model.addElement(tokens[2]);}
}
}
catch(FileNotFoundException e2){
JOptionPane.showMessageDialog(null,"File not found", "Error",JOptionPane.ERROR_MESSAGE);
}
catch(IOException ex){
JOptionPane.showMessageDialog(null,"File not found", "Error",JOptionPane.ERROR_MESSAGE);
}
}
}
当我搜索记录时。第一次 - 我的 JList 填充了搜索结果。然后,当我从 JList 中选择一个项目时,它会起作用(在 JLabel 上设置正确的图像),直到我执行新的搜索。一旦我单击搜索按钮(第二次)。我的程序抛出 nullPointExecption 并停止工作。抱歉,我没有包括 SSCCE。但如果这些小信息还不够,请告诉我。 :)
好吧,我解决了我的问题... 单击搜索按钮时,代码 model.clear() 会清除列表中的所有项目。由于这个原因,列表中不会有任何选定的项目,从而导致空指针异常。但我该如何解决这个问题。当为 JList 调用 getSelctedValue() 时,我可以清除所有字段但避免空值吗?
我尝试这样做,但仍然不起作用。
public class searchListListener implements ListSelectionListener {
String s;
String imagePath;
public void valueChanged(ListSelectionEvent evt){ try{
imagePath= (String) searchResult.getSelectedValue();
ImageIcon image = new ImageIcon(imagePath);
imageLabel.setIcon(image);
searchResult.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
catch(NullPointerException ne){
JOptionPane.showMessageDialog(null, "NullPointerException");
model.addElement(s);
searchResult.setSelectedValue(s, true);
}
finally{
s=imagePath;
}
}
}
public class typeChooserBoxListener implements ItemListener{
public void itemStateChanged(ItemEvent ev){
}
}
我是这个java世界的新手,如果我没能帮助你,我很抱歉。:(
最佳答案
如果没有异常的堆栈跟踪或 searchResult.getSelectedValue() 中发生的情况,很难判断。
也许试试这个:
public void valueChanged(ListSelectionEvent evt){
if( evt.getValueIsAdjusting() ) return;
// your code here
}
关于java - ListSelectionListener 运行时 JList 中出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202316/