<Swing Dev> NPE: JComponent.paintComponent in 6u25, 7b140
Alexander Potochkin
Alexander.Potochkin at oracle.com
Tue May 10 09:07:53 UTC 2011
Hello
I guess there is a threading problem in the code,
Janda, could you override the paintComponent() method of the component
where the exception is thrown
and make sure that it is called on the Event Dispatching Thread?
System.out.println("SwingUtilities.isEventDispatchThread() =
"+SwingUtilities.isEventDispatchThread());
Thanks
alexp
> Hi Janda,
>
> I don't understand how did you get NPE with provided stacktrace?
> JComponent#paintComponent cannot get g = null, because of in the
> previous JComponent#paintChildren method we have the following code:
> Graphics cg = sg.create(cr.x, cr.y, cr.width,
> cr.height);
> cg.setColor(comp.getForeground()); // here
> will be NPE when cg is null
>
> I'm also not sure that it's valid situation to pass in the
> JComponent#paintComponent method null as a Graphics. Could you please
> provide a small test?
>
> Regards, Pavel
>> protected void paintComponent(Graphics g) {
>> if (ui != null) {
>> Graphics scratchGraphics = (g == null) ? null : g.create();
>> try {
>> ui.update(scratchGraphics, this);
>> }
>> finally {
>> scratchGraphics.dispose(); // here
>> is NPE when input 'g' is null
>> }
>> }
>> }
>>
>> uname -a
>> Linux linux-tp9a 2.6.25.20-0.4-default #1 SMP 2009-06-01 09:57:12
>> +0200 x86_64 x86_64 x86_64 GNU/Linux
>>
>> java version "1.6.0_25"
>> Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
>> Java HotSpot(TM) Server VM (build 20.0-b11, mixed mode)
>>
>> Stack trace
>>
>> AWT-EventQueue-0 at 2851, priority=6, in group 'main', status: 'RUNNING'
>> at javax.swing.JComponent.paintComponent(JComponent.java:755)
>> at javax.swing.JComponent.paint(JComponent.java:1,029)
>> at javax.swing.JComponent.paintChildren(JComponent.java:862)
>> at javax.swing.JComponent.paint(JComponent.java:1,038)
>> at javax.swing.JComponent.paintChildren(JComponent.java:862)
>> at javax.swing.JComponent.paint(JComponent.java:1,038)
>> at javax.swing.JComponent.paintChildren(JComponent.java:862)
>> at javax.swing.JComponent.paint(JComponent.java:1,038)
>> at javax.swing.JComponent.paintToOffscreen(JComponent.java:5,124)
>> at
>> javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:278)
>> at javax.swing.RepaintManager.paint(RepaintManager.java:1,224)
>> at javax.swing.JComponent._paintImmediately(JComponent.java:5,072)
>> at javax.swing.JComponent.paintImmediately(JComponent.java:4,882)
>> at
>> javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
>> at
>> javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
>> at
>> javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
>> at
>> javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
>> at
>> java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
>> at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
>> at java.awt.EventQueue.access$000(EventQueue.java:84)
>> at java.awt.EventQueue$1.run(EventQueue.java:602)
>> at java.awt.EventQueue$1.run(EventQueue.java:600)
>> at
>> java.security.AccessController.doPrivileged(AccessController.java:-1)
>> at
>> java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
>> at
>> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
>> at
>> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
>> at
>> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
>> at
>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
>> at
>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
>> at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
>
More information about the swing-dev
mailing list