1

I'm trying to create a 2D renderer for the app I am coding.
I'm using paintComponent to paint all the images to the JPanel, and well. Things are going wrong.

First of all, I used this:

frame.getContentPane().add(p);
frame.getContentPane().validate();
frame.getContentPane().repaint();

This worked fine, except the frame would overload with JPanels.

All worked perfectly when I used this as my code:

frame.getContentPane().add(p);
frame.getContentPane().validate();
frame.getContentPane().repaint();
frame.getContentPane().list()
System.out.print("\n\n\n");
frame.getContentPane().remove(p);

Which is perfect for what I needed. Except I didn't want the console being spammed with what is on the content pane.

So I decided to remove the list method and do this:

frame.getContentPane().add(p);
frame.getContentPane().validate();
frame.getContentPane().repaint();
frame.getContentPane().remove(p);

That is when it went bad.

Here is the error I get.

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 1
at java.awt.Container.getComponent(Container.java:302)
at javax.swing.JComponent.rectangleIsObscured(JComponent.java:4340)
at javax.swing.JComponent.paint(JComponent.java:1028)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5139)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:302)
at javax.swing.RepaintManager.paint(RepaintManager.java:1188)
at javax.swing.JComponent._paintImmediately(JComponent.java:5087)
at javax.swing.JComponent.paintImmediately(JComponent.java:4897)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:783)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:735)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:58)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1593)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:670)
at java.awt.EventQueue.access$400(EventQueue.java:96)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.awt.EventQueue$2.run(EventQueue.java:629)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:640)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

Anyone have any suggestions on how to fix?

Guillaume Polet
  • 47,259
  • 4
  • 83
  • 117
KeirDavis
  • 665
  • 2
  • 10
  • 32
  • 3
    no idea, is JFrame already visible on the screen???, for better help sooner post an [SSCCE](http://sscce.org/) demonstrated your issue, otherwise everything here could be only shots to the dark – mKorbel Oct 31 '12 at 11:15
  • 1
    why did you replace visible `JPanel` with another, in `Graphics/2D` must be some methods for `clearRectangle`, or something simlair, clear contents if is possible, I'm hope that rendering is based on `Swing Timer`, not on `Thread.sleep(int)`, in this case `Background Task` can firing an event to the already removed `JPanel` (could be `GC'ed` in this moment), post an SSCCE, – mKorbel Oct 31 '12 at 11:41
  • 1
    @mKorbel +1 Post an [SSCCE](http://sscce.org). – Guillaume Polet Oct 31 '12 at 12:25
  • 2
    Make sure you're using [`invokeLater()`](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html) for this. – Catalina Island Oct 31 '12 at 12:26
  • 1
    @Catalina is right. `System.out.print()` is synchronized, which may explain why your code _appears_ to work sometimes. – trashgod Oct 31 '12 at 12:56

0 Answers0