<Swing Dev> NPE: JComponent.paintComponent in 6u25, 7b140
Alexander Potochkin
Alexander.Potochkin at oracle.com
Tue May 10 10:26:29 UTC 2011
Hello Janda
> Stack trace is from thread called AWT-EventQueue... (status: 'RUNNING'). I suppose that it is EventDispatchThread.
Right
> But there can be more threads with same name.
>
Make sure that you don't use your Swing components outside EDT,
if you a Swing methods e.g. on the main thread you can see all kind of
bizarre exceptions
when Swing decides to repaint the components
Thanks
alexp
> Due to infinite loop I wasn't able to get stack trace from NPE. So I used 'Exception breakpoins/Any Exception' from IntelliJ IDEA 8.1.4. (6u25)
>
> I'm sorry that I didn't save stack trace for all threads.
>
> Martin
>
> Stack trace
>>> AWT-EventQueue-0 at 2851, priority=6, in group 'main', status: 'RUNNING'
>>> at javax.swing.JComponent.paintComponent(JComponent.java:755)
>
>
> ----- Original Message -----
> From: "Alexander Potochkin"<Alexander.Potochkin at oracle.com>
> To: swing-dev at openjdk.java.net
> Sent: Tuesday, May 10, 2011 11:07:53 AM GMT +01:00 Amsterdam / Berlin / Bern / Rome / Stockholm / Vienna
> Subject: Re:<Swing Dev> NPE: JComponent.paintComponent in 6u25, 7b140
>
> 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