【发布时间】:2012-03-01 10:03:39
【问题描述】:
我编写了一些代码来设置 JLabel 上的图像。 Image的路径是通过getSelectedValue()方法获取JList中选中项的路径。
当用户从 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 调用 getSelectedValue() 时,我可以清除所有字段但避免空值吗?
我试过这样做,但还是不行。
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世界的新手,对不起,如果我不能帮助你帮助我。:(
【问题讨论】:
-
请提供
ne.printStackTrace()输出 -
你总是选择相同的“第一”和“第二”项吗?如果是这样,请尝试更改您选择的“第一”和“第二”。
-
@MarekSebera 我如何使用这个 stackTrace 方法。你能给我一个信息吗,因为我一生中从未使用过它。所以我对此一无所知。
标签: java swing nullpointerexception jlist