JDK-4984970 : Java2Demo threw exception in win2003-amd
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 5.0
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_2003
  • CPU: x86
  • Submitted: 2004-01-28
  • Updated: 2004-02-17
  • Resolved: 2004-02-17
Related Reports
Duplicate :  
Relates :  
Relates :  
Description
Java Version: 1.5.0-b36-beta2
Platforms: AMD win2003

Problems:
When running Java2D demo which bundled in 1.5.0-b36-beta2, by clicking Mix, 
you got lots exception as follwoing:

java.lang.NullPointerException
        at java.awt.Dimension.<init>(Dimension.java:91)
        at java.awt.Component.getMaximumSize(Component.java:2325)
        at java.awt.Container.getMaximumSize(Container.java:1622)
        at javax.swing.JComponent.getMaximumSize(JComponent.java:1579)
        at javax.swing.BoxLayout.checkRequests(BoxLayout.java:435)
        at javax.swing.BoxLayout.layoutContainer(BoxLayout.java:375)
        at javax.swing.JToolBar$DefaultToolBarLayout.layoutContainer(JToolBar.ja
va:786)
        at java.awt.Container.layout(Container.java:1398)
        at java.awt.Container.doLayout(Container.java:1388)
        at java.awt.Container.validateTree(Container.java:1470)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validate(Container.java:1445)
        at java2d.DemoGroup.setup(DemoGroup.java:257)
        at java2d.GlobalPanel.stateChanged(GlobalPanel.java:102)
        at javax.swing.JTabbedPane.fireStateChanged(JTabbedPane.java:283)
        at javax.swing.JTabbedPane$ModelListener.stateChanged(JTabbedPane.java:2
15)
        at javax.swing.DefaultSingleSelectionModel.fireStateChanged(DefaultSingl
eSelectionModel.java:116)
        at javax.swing.DefaultSingleSelectionModel.setSelectedIndex(DefaultSingl
eSelectionModel.java:50)
        at javax.swing.JTabbedPane.setSelectedIndexImpl(JTabbedPane.java:471)
        at javax.swing.JTabbedPane.setSelectedIndex(JTabbedPane.java:457)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.mousePressed(BasicTa
bbedPaneUI.java:3192)
        at java.awt.Component.processMouseEvent(Component.java:5462)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3052)
        at java.awt.Component.processEvent(Component.java:5230)
        at java.awt.Container.processEvent(Container.java:1961)
        at java.awt.Component.dispatchEventImpl(Component.java:3933)
        at java.awt.Container.dispatchEventImpl(Container.java:2019)
        at java.awt.Component.dispatchEvent(Component.java:3781)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4203
)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3880)

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3813)
        at java.awt.Container.dispatchEventImpl(Container.java:2005)
        at java.awt.Window.dispatchEventImpl(Window.java:1757)
        at java.awt.Component.dispatchEvent(Component.java:3781)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
java.lang.NullPointerException
        at javax.swing.SizeRequirements.calculateTiledPositions(SizeRequirements
.java:294)
        at javax.swing.BoxLayout.layoutContainer(BoxLayout.java:378)
        at javax.swing.JToolBar$DefaultToolBarLayout.layoutContainer(JToolBar.ja
va:786)
        at java.awt.Container.layout(Container.java:1398)
        at java.awt.Container.doLayout(Container.java:1388)
        at java.awt.Container.validateTree(Container.java:1470)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validate(Container.java:1445)
        at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.j
ava:354)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(System
EventQueueUtilities.java:116)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:201)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
java.lang.NullPointerException
        at javax.swing.SizeRequirements.calculateTiledPositions(SizeRequirements
.java:294)
        at javax.swing.BoxLayout.layoutContainer(BoxLayout.java:378)
        at javax.swing.JToolBar$DefaultToolBarLayout.layoutContainer(JToolBar.ja
va:786)
        at java.awt.Container.layout(Container.java:1398)
        at java.awt.Container.doLayout(Container.java:1388)
        at java.awt.Container.validateTree(Container.java:1470)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validate(Container.java:1445)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTab
bedPaneUI.java:1215)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.paint(BasicTabbedPaneUI.java
:530)
        at javax.swing.plaf.metal.MetalTabbedPaneUI.paint(MetalTabbedPaneUI.java
:827)
        at javax.swing.plaf.metal.MetalTabbedPaneUI.update(MetalTabbedPaneUI.jav
a:716)
        at javax.swing.JComponent.paintComponent(JComponent.java:714)
        at javax.swing.JComponent.paint(JComponent.java:977)
        at javax.swing.JComponent.paintChildren(JComponent.java:814)
        at javax.swing.JComponent.paint(JComponent.java:986)
        at javax.swing.JComponent.paintChildren(JComponent.java:814)
        at javax.swing.JComponent.paint(JComponent.java:986)
        at javax.swing.JComponent.paintChildren(JComponent.java:814)
        at javax.swing.JComponent.paint(JComponent.java:986)
        at javax.swing.JLayeredPane.paint(JLayeredPane.java:559)
        at javax.swing.JComponent.paintChildren(JComponent.java:814)
        at javax.swing.JComponent.paint(JComponent.java:986)
        at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4875)

        at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4828)
        at javax.swing.JComponent._paintImmediately(JComponent.java:4771)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4578)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:426)

        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(System
EventQueueUtilities.java:117)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:201)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
java.lang.NullPointerException
        at javax.swing.SizeRequirements.calculateTiledPositions(SizeRequirements
.java:294)
        at javax.swing.BoxLayout.layoutContainer(BoxLayout.java:378)
        at javax.swing.JToolBar$DefaultToolBarLayout.layoutContainer(JToolBar.ja
va:786)
        at java.awt.Container.layout(Container.java:1398)
        at java.awt.Container.doLayout(Container.java:1388)
        at java.awt.Container.validateTree(Container.java:1470)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validateTree(Container.java:1477)
        at java.awt.Container.validate(Container.java:1445)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTab
bedPaneUI.java:1215)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(BasicTabbedPane
UI.java:1235)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.focusLost(BasicTabbe
dPaneUI.java:3241)
        at java.awt.Component.processFocusEvent(Component.java:5357)
        at java.awt.Component.processEvent(Component.java:5221)
        at java.awt.Container.processEvent(Container.java:1961)
        at java.awt.Component.dispatchEventImpl(Component.java:3933)
        at java.awt.Container.dispatchEventImpl(Container.java:2019)
        at java.awt.Component.dispatchEvent(Component.java:3781)
        at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.ja
va:1804)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeybo
ardFocusManager.java:836)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFoc
usManager.java:526)
        at java.awt.Component.dispatchEventImpl(Component.java:3819)
        at java.awt.Container.dispatchEventImpl(Container.java:2019)
        at java.awt.Component.dispatchEvent(Component.java:3781)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

To reproduce:
Running Java2D by using java -jar Java2D/*.jar
click Mix button, you will see the exceptions;

Comments
EVALUATION I was able to reproduce this problem with B35 on my Windows AMD64 system by sequentially clicking on the programs tabs as fast as the screen can draw the test. I suspect a timing problem in the AWT Window creation code. I've seen this type of intermittent problem on most VMs that I've worked with. ###@###.### 2004-01-29 Name: agR10216 Date: 02/03/2004 I've looked at this bug since it seemed AWT-related. I could reproduce the bug on Solaris/sparc using the tiger build 36. The actual problem is a race between the event dispatch thread and the main thread. The demo adds components to a visible frame from the main thread. More specifically, a button is added to a toolbar, which ancestor (not direct) is the visible frame, and then setMaximumSize() is called on the button. In a process of the button creation invalidate() is sheduled to be invoked on the EDT via JComponent.revalidate(). Then invalidate() is called on the EDT, and setMaximumSize() may be called on the main thread at the same time. Component.setMaximumSize() sets the field maxSize and then maxSizeSet. Component.invalidate() may nullify maxSize if it don't see that maxSizeSet is true. After that the button is in an inconsistent state (field maxSize is null, but maxSizeSet is true), and it causes NPE when maxSize is dereferenced. Neither Swing, nor AWT is thread-safe (see, for example, http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html), so the demo should be corrected. AWT, in turn, may consider whether to synchronize access to Component's {max|min|pref}Size and the corresponding flags {max|min|pref}SizeSet. ###@###.### 2004-02-03 ====================================================================== Name: agR10216 Date: 02/04/2004 I've filed the bug 4988378 about the synchronization issue with Component.{max|min|pref}Size againts classes_awt. So this bug is against the demo wholly. ###@###.### 2004-02-04 ====================================================================== There is really no need to keep this bug open. Fixing the synchronization issue will solve the problem. Closing as a duplicate of 4971236. ###@###.### 2004-02-17
17-02-2004