Исключение нулевого указателя в JList, когда работает ListSelectionListener - PullRequest
0 голосов
/ 09 февраля 2012

Я написал некоторый код, который устанавливает изображение на JLabel. Путь Image получается из метода 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 () очищает все элементы в списке при нажатии кнопки поиска. По этой причине в списке не будет выбранного элемента, что приведет к исключению нулевого указателя. Но как мне это решить. Могу ли я очистить все поля, но избежать нулевого значения при вызове getSelctedValue () для JList.

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

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

1 Ответ

1 голос
/ 09 февраля 2012

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

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

...