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@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)

Reply via email to