[Java Swing AWT]:为什么我的代码中会出现这个异常?

[Java Swing AWT]:为什么我的代码中会出现这个异常?,java,swing,exception,awt,Java,Swing,Exception,Awt,在我们的Java RMI分布式棋盘游戏中(玩家被视为一个虚拟环网,其中一个玩家允许以下玩家在完成其任务后立即进行游戏),有时客户端无法初始化其GUI,因为向其发送执行权限的客户端会引发异常。例外情况如下: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 91 at java.awt.Container.getComponent(Container.jav

在我们的Java RMI分布式棋盘游戏中(玩家被视为一个虚拟环网,其中一个玩家允许以下玩家在完成其任务后立即进行游戏),有时客户端无法初始化其GUI,因为向其发送执行权限的客户端会引发异常。例外情况如下:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 91
at java.awt.Container.getComponent(Container.java:327)
at javax.swing.JComponent.rectangleIsObscured(JComponent.java:4391)
at javax.swing.JComponent.paint(JComponent.java:1052)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
at javax.swing.JComponent._paintImmediately(JComponent.java:5167)
at javax.swing.JComponent.paintImmediately(JComponent.java:4978)
at javax.swing.RepaintManager$3.run(RepaintManager.java:808)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

因此,客户端在登录窗口冻结,无法播放。有时会发生,有时不会。我们不知道为什么,因为正如您所看到的,出现异常的代码引用……我们只知道这是swing/awt的问题……您知道什么吗?

通常,只有在awt/swing事件调度线程之外执行GUI操作时,才会发生此类错误。当Swing尝试重新绘制视图时,另一个线程似乎正在更改您的GUI


您可以尝试查找EDT违规,但该程序并不总是可靠的。

如果您觉得有必要问“这是[其他数百万程序正在使用的框架]中的一个错误吗?”,答案几乎总是“否!”。我不认为这是一个错误……我知道我在某个地方犯了错误,但由于异常堆栈跟踪没有说明在哪里,然后我很难理解…因为getComponent中的异常是“ArrayIndexOutofBounds”,所以我要看的第一件事是,您是否在某个管理器或容器中添加了无效的内容。我将试用该程序。在所有的项目中,我们总是使用Swing.invokeAndWait()来确保核心程序只在GUI更新完成后执行……所以,我真的很惊讶。非常感谢。