java - ListSelectionListener 运行时 JList 中出现空指针异常

标签 java swing nullpointerexception jlist

我编写了一些在 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/

相关文章:

java - 用 Java 放映幻灯片?

java - JSP 的 JTable 替代品

java - 如何在运行时设置 JTextField 的宽度?

java - Jar文件下载到缓存后只能打开一次

android - 创建线性布局时出现 NullPointerException

java - Gerrit 删除需要验证 +1(已验证)

java - 第三方库来创建 jar 文件?

java - Intellij IDEA - org.apache.jasper.JasperException : Unable to compile class for JSP

java - Servlet 到 JSP 总是传递空值

java - 我该如何避免 NullPointerException?