【问题标题】:Null pointer Exception in JList when is ListSelectionListener is running当 ListSelectionListener 正在运行时,JList 中的空指针异常
【发布时间】: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


【解决方案1】:

如果没有异常的堆栈跟踪或 searchResult.getSelectedValue() 中发生的情况,很难判断。

也许试试这个:

public void valueChanged(ListSelectionEvent evt){
    if( evt.getValueIsAdjusting() ) return;

    // your code here

}

【讨论】:

  • 感谢您的回复...它没有工作。同样的错误再次发生。一个
  • 感谢您的回复。我尝试过这种方式,但实际上没有用。它显示了同样的错误。你能告诉我如何打印这个错误的堆栈跟踪,以便我可以提供给大家。我以前从未使用过这个堆栈跟踪,所以我不知道它。
  • stacktrace 是 ne.printStackTrace() 打印出来的 - 以及你在我发布答案后 1 秒添加的内容; )
  • ...您确实确保图像的路径有效并且图像采用受支持的格式(gif、jpg、png)?
  • 谢谢,我不知道它是 Stack Trace 的输出:D... 是的,我有 .png 或 .jpg 格式的所有图像的路径...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2013-12-19
  • 2015-12-11
  • 2018-11-28
相关资源
最近更新 更多