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?

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.<init>(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)

Reply via email to