我有一个堆栈跟踪,需要一些帮助解释:
java.lang.ArrayIndexOutOfBoundsException: 36 >= 36
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.tree.VariableHeightLayoutCache.getNode(VariableHeightLayoutCache.java:976)
at javax.swing.tree.VariableHeightLayoutCache.getPreferredHeight(VariableHeightLayoutCache.java:274)
at javax.swing.plaf.basic.BasicTreeUI.updateCachedPreferredSize(BasicTreeUI.java:1823)
at javax.swing.plaf.basic.BasicTreeUI.getPreferredSize(BasicTreeUI.java:1924)
at javax.swing.plaf.basic.BasicTreeUI.getPreferredSize(BasicTreeUI.java:1912)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1642)
at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:769)
at java.awt.Container.layout(Container.java:1420)
at java.awt.Container.doLayout(Container.java:1409)
at java.awt.Container.validateTree(Container.java:1506)
at java.awt.Container.validate(Container.java:1479)
at javax.swing.RepaintManager$2.run(RepaintManager.java:698)
at javax.swing.RepaintManager$2.run(RepaintManager.java:696)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:695)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1679)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715)
at java.awt.EventQueue.access$400(EventQueue.java:82)
at java.awt.EventQueue$2.run(EventQueue.java:676)
at java.awt.EventQueue$2.run(EventQueue.java:674)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:685)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
栈中的文件或函数都与我的程序无关,因此我认为它必须是Swing内部的问题。这并不意味着可能不是我的程序出了问题。
我基本上可以理解JVM在做什么 - 看起来它正在重新绘制我的一个位于滚动窗格中的JTree组件(我有几个,所以我不知道它可能是哪个)。
我猜测可能会导致这个错误的原因是树的内容(因此其中的节点数)在重绘期间某个时刻发生了变化,因此存储子节点的向量在计算组件大小时发生了大小变化。
听起来合理吗?
如果是这种情况,我该如何解决?我想要在更新进行时阻止重绘,或者在重绘进行时阻止更新。
Exception
的信息很有趣。忍不住要为这个问题点赞。 - Mena