lochi
lochi

Reputation: 880

Setting ListModels to JList

I have a piece of code that setup a ListModel based on content of a file and add it to a jList. The code runs correctly when I select a file for the first time. When I select a second file it gives Array Out of Bounds Exception. Error occurs at runList.setModel(model);

Here is the code

        protected class OpenFileListener implements ActionListener
 {

    @Override
    public void actionPerformed(ActionEvent ae) {
        try
        {
        JFileChooser fileChooser = new JFileChooser(); 
        fileChooser.setFileFilter(new FileNameExtensionFilter("*.txt", "txt"));
        fileChooser.setCurrentDirectory(new File("."));
        int result = fileChooser.showOpenDialog(null);
        fileName = fileChooser.getSelectedFile().getPath();
        molfindOutText.setText(getFileName());
        DefaultListModel model = new DefaultListModel();
        runList.setModel(model);
        File f = new File(getFileName());
        Scanner scanner = new Scanner(f);
        lineNo = 0 ;
        int i = 0;
        idLines = new ArrayList();
        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine();
            lineNo = lineNo+1;
            if (line.matches(".*COMPOUND_IDENTIFICATION_RUN.*"))
            {
            model.add(i, line);
            runList.setSelectedIndex(0);
            idLines.add(lineNo);
            i++;
            }
        }
        currentRun = 1;
        if (idLines.size()>1)
        {
        extractRunInfo(idLines.get(0),idLines.get(1)-2);
        }
        else
        {
        extractRunInfo(idLines.get(0),lineNo); 
        }
        scanner.close();
        runList.addListSelectionListener(lsl);
        }
        catch(Exception e) 
        {
    System.out.println(e.toString());
    }

    }

PrintStackTrace

java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.get(ArrayList.java:324)
    at edu.uconn.pharmacy.molfind.AnalysisPanel$1.valueChanged(AnalysisPanel.java:99)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1795)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1809)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
    at javax.swing.DefaultListSelectionModel.removeSelectionIntervalImpl(DefaultListSelectionModel.java:559)
    at javax.swing.DefaultListSelectionModel.clearSelection(DefaultListSelectionModel.java:403)
    at javax.swing.JList.clearSelection(JList.java:2043)
    at javax.swing.JList.setModel(JList.java:1676)
    at edu.uconn.pharmacy.molfind.AnalysisPanel$OpenFileListener.actionPerformed(AnalysisPanel.java:131)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6373)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6138)
    at java.awt.Container.processEvent(Container.java:2085)
    at java.awt.Component.dispatchEventImpl(Component.java:4735)
    at java.awt.Container.dispatchEventImpl(Container.java:2143)
    at java.awt.Component.dispatchEvent(Component.java:4565)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212)
    at java.awt.Container.dispatchEventImpl(Container.java:2129)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4565)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:679)
    at java.awt.EventQueue.access$000(EventQueue.java:85)
    at java.awt.EventQueue$1.run(EventQueue.java:638)
    at java.awt.EventQueue$1.run(EventQueue.java:636)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:652)
    at java.awt.EventQueue$2.run(EventQueue.java:650)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:649)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Upvotes: 0

Views: 546

Answers (1)

Russell Zahniser
Russell Zahniser

Reputation: 16364

It would appear that the error is in a selection listener you have registered on the list, which is trying to access an element of the (now empty) list. The second entry in the stack trace tells you where to look:

at edu.uconn.pharmacy.molfind.AnalysisPanel$1.valueChanged(AnalysisPanel.java:99)

Probably you just need valueChanged() to check if the list is empty and do nothing in that case.

Upvotes: 1

Related Questions