<Swing Dev> NPE: JComponent.paintComponent in 6u25, 7b140
Pavel Porvatov
pavel.porvatov at oracle.com
Tue May 10 07:57:06 UTC 2011
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