<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