【问题标题】:can't find the problem with java.lang.ArrayIndexOutOfBoundsException找不到 java.lang.ArrayIndexOutOfBoundsException 的问题
【发布时间】:2011-03-07 16:54:42
【问题描述】:

我的应用程序有问题,有时会在控制台中返回此错误,但我找不到来源(所有未知来源)。出现此错误后,应用程序似乎可以正常工作,但我想了解正在发生的事情......我该怎么办?

谢谢你,对不起我的英语!

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

【问题讨论】:

  • 此异常是否有原因

标签: java debugging exception exception-handling


【解决方案1】:

查看BasicListUI.updateLayoutState()的来源,只有在方法执行时显示的列表大小发生变化时才会发生这种情况。

最可能的原因是您正在从event dispatch thread 之外修改模型。这是一个严重的问题,因为它可能导致各种奇怪的行为,甚至损坏数据。

要解决这些问题,请在需要从 EDT 外部操作模型时使用 SwingUtilities.invokeLater()

【讨论】:

  • 您好,在使用 SwingUtilities.invokeLater() 测试我的应用程序 3 小时后,我可以说问题已经解决了!!!再次非常感谢@Michael Borgwardt
【解决方案2】:

这种类型的错误有时是由 关闭 EDT 更新 GUI 组件引起的,而应该在 EDT 上完成。

如果修复任何违反该原则的代码并不能解决问题,我建议你尝试准备一个SSCCE 并将其发布到线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2023-03-10
    相关资源
    最近更新 更多