2013-05-21 1 views
1

를 해결하십시오."javax.swing.JTabbedPane"에 탭을 추가하고있는 동안 "java.lang.ArrayIndexOutOfBoundsException : -1"

이 예외는 매우 무작위로 발생하며 최악의 부분은 예외를 재현 할 수 없다는 것입니다. 스택 추적에 예외가 throw 된 addTab()이 표시됩니다.

여기 여기에 당신이 어떻게 든 ArrayList에서 요소를 얻기 위해 인덱스 -1을 통과하기 때문에 trace-

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 

답변

2

스택 인 코드 -

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); 
     } 

이며, 인덱스 -1이 유효 인덱스입니다. ArrayList의 인덱스는을 기반으로 한 이며, 전달 된 인덱스에 요소가 저장되지 않은 경우 IndexOutOfBoundException을 던집니다. 당신은 필요

ArrayListget(index) 메서드를 호출하기 전에 유효한 인덱스 수표을합니다. 예 :

public String getTitleAt(index) { 
    if(index >=0 && index<list.size()) { 
    list.get(index); 
    } 
    return null; //fallback 
} 
+0

이 문제가 '동시성의 동시성'과 관련이 없다고 확신하십니까? http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html –

+0

이 문제는 http://stackoverflow.com/questions/11579556/swing-jtabbedpane-throws-indexoutofboundsexception-while- 충전? rq = 1? –

+0

이 오류가 발생하는 코드 부분이 스윙 구성 요소라는 것을 알 수 없었습니다. 방금 예외를 피하는 일반적인 방법을 제안했습니다. – sanbhat

관련 문제