2016-05-27 4 views
-2

の外に、エラーが発生したブレークポイントを右に、私はこれ持っていないとき:次には境界例外から抜け出す私はEclipseのデバッガにいるときにリストが境界

elementData Object[49] (id=77) // I would provide the elements, but that is confidential (like, 
            // actually NDA, for real confidential). I can guarantee they are Strings and populated with data. 
modCount  34  
size   34  

を、私はこれを取得しますデバッガが(問題の行の前に、cCase.setGovSchool(propertyGet(this.fileContents.get(0)));)のサイズが34であると言うサイズが0であることを私に伝えるスタックトレース。

照会された索引がサイズ以上の場合にのみ、Javaソース・コードを調べると、IndexOutOfBoundsExceptionがスローされます。インデックス0はサイズ34以上ではありません。スタックトレースに表示されるように、サイズが0に設定された原因は何ですか?

スタックトレースの下:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
    at java.util.ArrayList.get(ArrayList.java:429) 
    at ifly6.casemanager.CaseManagerReader.getCase(CaseManagerReader.java:53) 
    at ifly6.casemanager.CMZipLoader.getCases(CMZipLoader.java:71) 
    at ifly6.casemanager.gui.CMSearchPane$1.getMatches(CMSearchPane.java:160) 
    at ifly6.casemanager.gui.CMSearchPane$1.actionPerformed(CMSearchPane.java:151) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6525) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
    at java.awt.Component.processEvent(Component.java:6290) 
    at java.awt.Container.processEvent(Container.java:2234) 
    at java.awt.Component.dispatchEventImpl(Component.java:4881) 
    at java.awt.Container.dispatchEventImpl(Container.java:2292) 
    at java.awt.Component.dispatchEvent(Component.java:4703) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) 
    at java.awt.Container.dispatchEventImpl(Container.java:2278) 
    at java.awt.Window.dispatchEventImpl(Window.java:2750) 
    at java.awt.Component.dispatchEvent(Component.java:4703) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:702) 
    at java.awt.EventQueue$3.run(EventQueue.java:696) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
    at java.awt.EventQueue$4.run(EventQueue.java:724) 
    at java.awt.EventQueue$4.run(EventQueue.java:722) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

コードの関連セクションは次のとおりです。

public CaseManagerReader(List<String> fileContents) { 
    this.fileContents = fileContents; 
} 

public CMCase getCase() { 

    CMCase cCase = new CMCase(); 

    // ========== 
    // Fields 
    // ========== 
    cCase.setGovSchool(propertyGet(this.fileContents.get(0))); 
    cCase.setTeamName(propertyGet(fileContents.get(1))); 
    cCase.setPrimeMinister(propertyGet(fileContents.get(2))); 
    cCase.setmGovernment(propertyGet(fileContents.get(3))); 
    cCase.setCaseOwner(propertyGet(fileContents.get(4))); 

} 
+0

それは安全でないマルチスレッドを叫びます – Amit

+0

私が知る限り、私はスレッドが(ウィンドウが実行されるスレッドを超えて)作成していません。デバッガは3つのスレッドを表示します。 – ifly6

+0

マルチスレッドとは別に、これはfileContentsがいっぱいではない/空であるようです。 – Blue

答えて

-1

それは、デバッガで動作しますが、それは競合状態では生きていけないとき。私の推測では、スタックトレースに基づいてSwingUtilities.InvokeLater()を呼び出すボタンをクリックして、InvokeLater実行可能ファイルによってデータが入力されるリストにすぐにデータが存在することを期待しています。それは間違いなくそのようなものを引き起こします。

+0

スレッドは1つだけです(DestroyJavaVMスレッド以外)。デバッガでは動作しません。それはまた生きていない。 – ifly6

+0

invokeLaterを使用していますか? –

+0

デバッガには、スレッドが1つしかないことが示されています(DestroyJavaVMスレッド以外はマルチスレッドでは問題にはなりません)。 – ifly6

関連する問題