Исключение нулевого указателя в JList, когда работает ListSelectionListener

Я написал код, который устанавливает изображение на JLabel. Путь к изображению получается из метода getSelectedValue() для выбранного элемента в JList.

Список Jlist заполнялся, когда пользователь нажимал кнопку поиска, вводя элемент для поиска в JTextField (например, searchTextField) после выбора любого параметра из трех элементов в JComboBox (например, typeChooserBox). Затем моя программа считывает сохраненные записи из файла «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 вызывается getSectedValue().

Я пытался сделать это, но это все еще не сработало.

    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. Извините, если я не смог помочь вам помочь мне. :(


person Bcall BoB    schedule 08.02.2012    source источник
comment
предоставьте нам ne.printStackTrace() вывод, пожалуйста   -  person Marek Sebera    schedule 09.02.2012
comment
Возможный дубликат stackoverflow.com/questions/7310294/?   -  person Adam Mihalcin    schedule 09.02.2012
comment
Вы всегда выбираете один и тот же первый и второй предмет? Если это так, попробуйте изменить то, что вы выбираете первым и вторым.   -  person Dan W    schedule 09.02.2012
comment
@MarekSebera Как использовать этот метод stackTrace. Можете ли вы дать мне информацию, потому что я никогда не использовал его в своей жизни. Так что я не знаю об этом.   -  person Bcall BoB    schedule 09.02.2012


Ответы (1)


Трудно сказать без трассировки стека вашего исключения или того, что происходит в searchResult.getSelectedValue().

Возможно, попробуйте это:

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

    // your code here

}
person alex    schedule 08.02.2012
comment
Спасибо за ответ... не помогло. Та же ошибка повторилась. а - person Bcall BoB; 09.02.2012
comment
Спасибо за ваш ответ. Я пробовал этот способ, но на самом деле это не сработало. Он показал ту же ошибку. Не могли бы вы сказать мне, как распечатать трассировку стека этой ошибки, чтобы я мог предоставить ее вам всем. Я никогда раньше не использовал эту трассировку стека, поэтому я не знаю об этом. - person Bcall BoB; 09.02.2012
comment
stacktrace - это то, что выводит ne.printStackTrace() - и то, что вы добавили через 1 секунду после того, как я опубликовал свой ответ; ) - person alex; 09.02.2012
comment
... вы убедились, что путь к изображению действителен и что изображение находится в поддерживаемом формате (gif, jpg, png)? - person alex; 09.02.2012
comment
Спасибо, я не знал, что это вывод Stack Trace: D... да, и у меня есть путь ко всем изображениям в формате .png или .jpg... - person Bcall BoB; 09.02.2012
comment
Я отредактировал свой вопрос. Надеюсь, это поможет прояснить мою проблему. - person Bcall BoB; 09.02.2012