2012-01-05 5 views
0

ファイルの内容に基づいてListModelをセットアップしてjListに追加するコードがあります。コードを初めて選択すると、コードが正しく実行されます。 2番目のファイルを選択すると、Array Out of Bounds Exceptionが返されます。 runList.setModel(model)でエラーが発生しました。ここで ListModelsを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

スタックトレースを送信してください。 –

+0

ここにprintStackTraceがあります – lochi

答えて

1

それはエラーがの要素にアクセスしようとしているあなたがリストに登録されている選択リスナー、であるように思われます(今は空の)リスト。スタックトレースはどこも説明しています2番目のエントリ:

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

おそらく、あなただけのリストが空であるかどうかを確認し、その場合には何もしないことのvalueChanged()を必要とします。

+0

ListSelectionListnerを削除すると問題が解決しました。私に正しい方向に向けてくれてありがとう。 runList.removeListSelectionListener(lsl); runList.setModel(model); – lochi

関連する問題