2012-01-20 10 views
0

私のオブジェクトのリストを再描画しているうちに次の例外が発生しています。アプリケーションファイルへの参照が見えないため、このエラーが発生している場所を見つけることができません。リストのペイント中にJavaエラーが発生しました

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1 
    at java.util.Vector.elementAt(Vector.java:341) 
    at javax.swing.tree.VariableHeightLayoutCache.updateNodeSizes(VariableHeightLayoutCache.java:908) 
    at javax.swing.tree.VariableHeightLayoutCache.getBounds(VariableHeightLayoutCache.java:212) 
    at javax.swing.plaf.basic.BasicTreeUI.getPathBounds(BasicTreeUI.java:521) 
    at javax.swing.plaf.basic.BasicTreeUI.paint(BasicTreeUI.java:1184) 
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:154) 
    at javax.swing.JComponent.paintComponent(JComponent.java:763) 
    at javax.swing.JComponent.paint(JComponent.java:1040) 
    at javax.swing.JComponent.paintChildren(JComponent.java:873) 
    at javax.swing.JComponent.paint(JComponent.java:1049) 
    at javax.swing.JViewport.paint(JViewport.java:758) 
    at javax.swing.JComponent.paintChildren(JComponent.java:873) 
    at javax.swing.JComponent.paint(JComponent.java:1049) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5135) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1490) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1421) 
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:305) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1235) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5083) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4893) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:724) 
    at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:704) 
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:136) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:220) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:650) 
    at java.awt.EventQueue.access$000(EventQueue.java:95) 
    at java.awt.EventQueue$1.run(EventQueue.java:613) 
    at java.awt.EventQueue$1.run(EventQueue.java:611) 
    at java.security.AccessController.doPrivileged(AccessController.java:224) 
    at com.ibm.oti.security.CheckedAccessControlContext.securityCheck(CheckedAccessControlContext.java:30) 
    at sun.misc.JavaSecurityAccessWrapper.doIntersectionPrivilege(JavaSecurityAccessWrapper.java:29) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:621) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:280) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:195) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:185) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:180) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:172) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:133) 

答えて

1

there are two issues

ネイティブOSから待ち時間より

2)高速存在うち境界のDirtyRegions 1)塗装、f.e. Windows OS(cca)のアップデートは30ミリ秒より速く更新されます

マイナーな問題がある場合は、Custom Look and Feelsの一部を実装しましたか?

あなたが別のスレッド内のノードを変更する場合は、スレッドの同時実行があなたの問題である可能性がSSCCEフォーム

+0

+1引用した記事は、EDT違反を特定するいくつかの方法を示唆しています。 – trashgod

1

でのRepaintManagerから例外を生成したコードをあなたのポストを編集してください。これが問題の場合は、SwingUtilities.invokeLaterを使用してツリーノードを操作し、スイングスレッド上で可視ノードへの変更が確実に行われるようにします。

+1

+1、これも私の推測だろう。ポスターは、潜在的な問題をよりよく理解するために、[同時実行のスイング](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)のSwingチュートリアルを読んでください。 – camickr

関連する問題