May AbstractButton.doClick() be called by non-edt threads? (original) (raw)
Pavel Porvatov pavel.porvatov at oracle.com
Tue Nov 1 12:20:29 UTC 2011
- Next message: May Component.isFocusOwner() be called by non-edt threads?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Clemens,
Hi,
I recently got a really strange NPE when running Java2Demo, and by looking at the code it seems this NPE can only be caused by threading violations. (Component.maxSizeSet set to true, while Component.maxSize not visible) I had a look at Java2Demo's source, where I found code like this (ClipAnim.DemoControls.run()): @Override public void run() { ((AbstractButton) toolbar.getComponentAtIndex(2)).doClick(); } According to CustomControls.start(), this overriden run-method is executed on a fresh thread, so outside of the EDT. May AbstractButton.doClick() be called from outside the EDT? Of course all Swing methods (if javadoc doesn't say the opposite) must be called from EDT thread. I filed CR 7107119 (NPE when running Java2Demo), which should become visible on bugs.sun.com soon.
Thanks, Pavel
Furthermore, is there any reason CustomControls.stop() is synchronized, while start() isn't?
Thanks, Clemens
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at java.awt.Dimension.(Dimension.java:111) at java.awt.Component.getMaximumSize(Component.java:2751) at java.awt.Container.getMaximumSize(Container.java:1887) at javax.swing.JComponent.getMaximumSize(JComponent.java:1698) at javax.swing.BoxLayout.checkRequests(BoxLayout.java:484) at javax.swing.BoxLayout.preferredLayoutSize(BoxLayout.java:300) at javax.swing.JToolBar$DefaultToolBarLayout.preferredLayoutSize(JToolBar.java:771) at java.awt.Container.preferredSize(Container.java:1788) at java.awt.Container.getPreferredSize(Container.java:1773) at javax.swing.JComponent.getPreferredSize(JComponent.java:1662) at java.awt.FlowLayout.layoutContainer(FlowLayout.java:609) at java.awt.Container.layout(Container.java:1503) at java.awt.Container.doLayout(Container.java:1492) at java.awt.Container.validateTree(Container.java:1688) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validate(Container.java:1623) at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:653) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1620) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.BoxLayout.preferredLayoutSize(BoxLayout.java:301) at javax.swing.JToolBar$DefaultToolBarLayout.preferredLayoutSize(JToolBar.java:771) at java.awt.Container.preferredSize(Container.java:1788) at java.awt.Container.getPreferredSize(Container.java:1773) at javax.swing.JComponent.getPreferredSize(JComponent.java:1662) at java.awt.FlowLayout.layoutContainer(FlowLayout.java:609) at java.awt.Container.layout(Container.java:1503) at java.awt.Container.doLayout(Container.java:1492) at java.awt.Container.validateTree(Container.java:1688) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validateTree(Container.java:1697) at java.awt.Container.validate(Container.java:1623) at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTabbedPaneUI.java:1446) at javax.swing.plaf.basic.BasicTabbedPaneUI.paint(BasicTabbedPaneUI.java:787) at javax.swing.plaf.metal.MetalTabbedPaneUI.paint(MetalTabbedPaneUI.java:843) at javax.swing.plaf.metal.MetalTabbedPaneUI.update(MetalTabbedPaneUI.java:724) at javax.swing.JComponent.paintComponent(JComponent.java:778) at javax.swing.JComponent.paint(JComponent.java:1054) at javax.swing.JComponent.paintChildren(JComponent.java:887) at javax.swing.JComponent.paint(JComponent.java:1063) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) at javax.swing.RepaintManager.paint(RepaintManager.java:1206) at javax.swing.JComponent.paintImmediately(JComponent.java:5169) at javax.swing.JComponent.paintImmediately(JComponent.java:4980) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) at javax.swing.RepaintManager.access$700(RepaintManager.java:59) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
- Next message: May Component.isFocusOwner() be called by non-edt threads?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]