2012-07-18 62 views
0

當我重繪()的面板,在這裏我把我的JLabel上,我得到的錯誤,但它仍然有效。我試着把panel.repaint();代碼在try語句中,並沒有幫助。任何其他人有JPanels重繪()的問題?呼叫重繪()對於JPanels

錯誤信息(從評論複製):

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 21 
at java.awt.Container.getComponent(Unknown Source) 
at javax.swing.JComponent.rectangleIsObscured(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)) 
+2

你知道錯誤是什麼嗎? – 2012-07-18 23:35:44

+0

有什麼錯誤?你在畫面上畫畫嗎?如果是這樣,考慮重寫paintComponent方法而不是paint方法,並確保始終調用super.paintComponent(g); – 2012-07-18 23:36:40

+0

錯誤消息是太大了,一個評論 第一部分 異常在線程「AWT-EventQueue的 - 0」 java.lang.ArrayIndexOutOfBoundsException:沒有這樣的孩子:21 \t在java.awt.Container.getComponent(來源不明) \t在javax.swing.JComponent.rectangleIsObscured(來源不明) \t在javax.swing.JComponent.paint(來源不明) \t在javax.swing.JComponent.paintToOffscreen(來源不明) \t在javax.swing.RepaintManager中的$ PaintManager .paintDoubleBuffered(來源不明) \t在javax.swing.RepaintManager中的$ PaintManager.paint(來源不明) ) – 2012-07-18 23:41:13

回答

1

確保對UI的所有修改在事件調度線程被執行,這包括添加和從容器中取出部件。

至於萊昂州,使用invokeLater方法將確保操作是在美國東部時間正確執行。

+0

invokeLater方法如何工作,以及如何實現它? – 2012-07-20 03:07:44

+1

InvokeLater基本上將一個Runnable對象放置到ETD隊列中,允許它在將來某個時間(在ETD內)執行。基本上,你需要調用SwingUtilities.invokeLater(...)並傳遞一個實現了Runnable接口的Object。當ETD處理隊列時,它將調用「運行」方法。 – MadProgrammer 2012-07-20 05:03:45

+1

您可以查看http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html瞭解更多詳情 – MadProgrammer 2012-07-20 05:03:54

2

我真的不知道,但我想我以前在同樣的問題絆倒了。我相信使用SwingUtilities.invokeLater幫助我支持。試試吧,我並不完全確定。