2015-03-10 1 views
-1

В нашей распределенной настольной игре Java RMI (где игрок рассматривается как виртуальная кольцевая сеть, где один игрок позволяет сыграть свою очередь, как только он закончит его), иногда клиент не может инициализировать свой графический интерфейс, потому что тот, разрешение на это повышает и исключение. Исключением является следующее:[Java Swing AWT]: почему это исключение связано с моим кодом?

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 ... знаете ли вы что-нибудь?

+0

Если вам кажется, что вам нужно спросить: «Это ошибка в [рамках, используемой буквально миллионами других программ]», ответ почти всегда «НЕТ!». –

+0

Я не думаю, что это ошибка ... Я знаю, что я делаю ошибку где-то, но поскольку трассировка стека исключений не говорит, где, тогда мне трудно понять ... –

+0

Поскольку исключение - «ArrayIndexOutofBounds» в getComponent, первое, что я хотел бы увидеть, это если вы добавили что-то недействительное к одному из ваших менеджеров или контейнеров. –

ответ

2

Обычно такие ошибки возникают только в том случае, если операции с графическим интерфейсом выполняются за пределами потока сообщений AWT/Swing Event Dispatch Thread. Похоже, что другой поток меняет ваш графический интерфейс, а Swing пытается перерисовать вид.

Вы можете попробовать http://www.swingexplorer.com/, чтобы найти нарушения EDT, но программа не всегда надежна.

+0

У меня будет пробная версия с этой программой. Во всем проекте мы всегда использовали Swing.invokeAndWait(), чтобы убедиться, что основная программа выполняется только после того, как обновления GUI были закончены ... так что я действительно удивлен. Спасибо. –

Смежные вопросы