Reputation: 880
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
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