1

の解決にご協力くださいjava.lang.ArrayIndexOutOfBoundsException

私はこの例外を非常にランダムに取得しています。最悪の部分は、例外を再現できなかったことです。Stack-Trace はaddTab()、その例外がスローされたことを示しています。

ここにコードがあります-

public class ClosableTabbedPane extends JTabbedPane{

    public void addTab(String title, Component component) {
            super.addTab(title+"       ", component);
        }


    public String getTabTitleAt(int index) {
        return super.getTitleAt(index).trim();
    }

    public void removeTab(int index){
            this.removeTabAt(index);
        }

これがスタックトレースです-

21 May 2013 09:38:11,992  ERROR eError : java.lang.ArrayIndexOutOfBoundsException: -1
       at java.util.ArrayList.elementData(ArrayList.java:371)
       at java.util.ArrayList.get(ArrayList.java:384)
       at javax.swing.JTabbedPane.getTitleAt(JTabbedPane.java:1112)

at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.updateHtmlViews(BasicTabbedPaneUI.java:3578)
       at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.componentAdded(BasicTabbedPaneUI.java:3713)
   at java.awt.Container.processContainerEvent(Container.java:2255)
       at java.awt.Container.processEvent(Container.java:2226)
       at java.awt.Component.dispatchEventImpl(Component.java:4861)

 at java.awt.Container.dispatchEventImpl(Container.java:2287)
       at java.awt.Component.dispatchEvent(Component.java:4687)
       at java.awt.Container.addImpl(Container.java:1131)
       at javax.swing.JTabbedPane.insertTab(JTabbedPane.java:724)

   at javax.swing.JTabbedPane.addTab(JTabbedPane.java:798)
       at net.abc.f.c.b.addTab(Unknown Source)
       at net.abc.f.a.c.a(Unknown Source)
       at com.xyz.b.b.f.<init>(Unknown Source)
       at com.xyz.b.b.f.<init>(Unknown Source)
       at com.xyz.main.c.w.a(Unknown Source)
        at com.xyz.main.c.o.run(Unknown Source)
       at java.lang.Thread.run(Thread.java:722)
-1 Error: java.lang.ArrayIndexOutOfBoundsException: -1
4

1 に答える 1

2

-1から要素を取得するために何らかの方法で index を渡しているためArrayList、 index-1は無効な index です。インデックス インArrayList0 ベースであり、渡されたインデックスに要素が格納されていない場合get(index)は をスローします。IndexOutOfBoundException

のメソッドを呼び出す前に、有効なインデックスをチェックする必要があります。何かのようなもの、get(index)ArrayList

public String getTitleAt(index) {
  if(index >=0 && index<list.size()) {  
     list.get(index);
  }
  return null; //fallback
}
于 2013-05-21T05:43:29.797 に答える