2012-01-20 2 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. Win OS (cca) 업데이트가 30 밀리 초보다 빠르게 업데이트됩니다.

사소한 문제가있는 경우 여기에 Custom Look and Feels 중 일부를 구현 했습니까?

다른 스레드에서 노드를 변경하는 경우 SSCCE 형태

+0

+1 인용 된 기사는 EDT 위반을 식별하는 몇 가지 방법을 제안합니다. – trashgod

1

에서의 RepaintManager에서 예외를 생성 된 코드와 귀하의 게시물을 수정하시기 바랍니다, 스레드 동시성은 문제가 될 수 있습니다. 이것이 문제라면, SwingUtilities.invokeLater를 사용하여 트리 노드를 조작하면 보이는 노드에 대한 모든 변경 사항이 스윙 스레드에서 생성됩니다.

+1

+1, 내 추측이 될 것입니다. 포스터는 잠재적 인 문제를 더 잘 이해하기 위해 [Concurrency in Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)의 스윙 튜토리얼을 읽어야합니다. – camickr

관련 문제