2012-01-05 32 views
0

我有一段代碼根據文件內容設置ListModel並將其添加到jList。當我第一次選擇文件時,代碼正確運行。當我選擇第二個文件時,它會給出數組越界異常。 runList.setModel(model);發生錯誤;將ListModel設置爲JList

下面是代碼

 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) 
+0

請發佈堆棧跟蹤。 – 2012-01-05 20:39:13

+0

這裏是printStackTrace – lochi 2012-01-05 21:07:58

回答

1

這樣看來,錯誤是在你已經註冊名單上的一個選擇監聽器,它試圖訪問的元素(現在爲空)列表。在堆棧跟蹤的第二個條目告訴你在哪裏看:

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

也許你只需要的valueChanged()來檢查,如果該列表是空的,什麼也不做在這種情況下。

+0

刪除ListSelectionListner修復了這個問題。感謝您指引我走向正確的方向。 runList.removeListSelectionListener(LSL); runList.setModel(model); – lochi 2012-01-05 21:35:55