Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[albireo-dev] size/layout management

Hi Gordon,

Since you added the font propagation code, I get this exception very often.
To reproduce, I only need to open the EmbeddedJTable view and close Eclipse.


Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at javax.swing.plaf.basic.BasicScrollBarUI.layoutVScrollbar(BasicScrollBarUI.java:585)
	at javax.swing.plaf.basic.BasicScrollBarUI.layoutContainer(BasicScrollBarUI.java:771)
	at java.awt.Container.layout(Container.java:1401)
	at java.awt.Container.doLayout(Container.java:1390)
	at java.awt.Container.validateTree(Container.java:1473)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at org.eclipse.albireo.core.SwingControl$5.validateTree(SwingControl.java:248)
	at java.awt.Container.validate(Container.java:1448)
	at org.eclipse.albireo.core.SwingControl$5.invalidate(SwingControl.java:243)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Container.setLayout(Container.java:1376)
	at javax.swing.plaf.basic.BasicScrollBarUI.installDefaults(BasicScrollBarUI.java:163)
	at javax.swing.plaf.metal.MetalScrollBarUI.installDefaults(MetalScrollBarUI.java:74)
	at javax.swing.plaf.basic.BasicScrollBarUI.installUI(BasicScrollBarUI.java:128)
	at javax.swing.JComponent.setUI(JComponent.java:650)
	at javax.swing.JScrollBar.setUI(JScrollBar.java:185)
	at javax.swing.JScrollBar.updateUI(JScrollBar.java:205)
	at javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1146)
	at javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1157)
	at javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1157)
	at javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1138)
	at org.eclipse.albireo.core.SwingControl.setComponentFont(SwingControl.java:463)
	at org.eclipse.albireo.core.SwingControl.access$7(SwingControl.java:438)
	at org.eclipse.albireo.core.SwingControl$8.run(SwingControl.java:527)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.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)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at javax.swing.plaf.basic.BasicScrollBarUI.layoutVScrollbar(BasicScrollBarUI.java:585)
	at javax.swing.plaf.basic.BasicScrollBarUI.layoutContainer(BasicScrollBarUI.java:771)
	at java.awt.Container.layout(Container.java:1401)
	at java.awt.Container.doLayout(Container.java:1390)
	at java.awt.Container.validateTree(Container.java:1473)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at java.awt.Container.validateTree(Container.java:1480)
	at org.eclipse.albireo.core.SwingControl$5.validateTree(SwingControl.java:245)
	at java.awt.Container.validate(Container.java:1448)
	at org.eclipse.albireo.core.SwingControl$5.invalidate(SwingControl.java:240)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Component.invalidate(Component.java:2443)
	at java.awt.Container.invalidate(Container.java:1419)
	at java.awt.Container.setLayout(Container.java:1376)
	at javax.swing.plaf.basic.BasicScrollBarUI.installDefaults(BasicScrollBarUI.java:163)
	at javax.swing.plaf.metal.MetalScrollBarUI.installDefaults(MetalScrollBarUI.java:74)
	at javax.swing.plaf.basic.BasicScrollBarUI.installUI(BasicScrollBarUI.java:128)
	at javax.swing.JComponent.setUI(JComponent.java:650)
	at javax.swing.JScrollBar.setUI(JScrollBar.java:185)
	at javax.swing.JScrollBar.updateUI(JScrollBar.java:205)
	at javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1146)
	at javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1157)
	at javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1157)
	at javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1138)
	at org.eclipse.albireo.core.SwingControl.setComponentFont(SwingControl.java:519)
	at org.eclipse.albireo.core.SwingControl.access$7(SwingControl.java:494)
	at org.eclipse.albireo.core.SwingControl$8.run(SwingControl.java:583)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.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)

I'm no longer convinced that doing a validate() upon revalidate() was a
good idea. I think I added it initially because overriding validate() was
not sufficient. But now that we override validateTree(), not validate(),
this is hopefully sufficient.

I'm therefore applying this. Let's hope that it works.

Bruno


Index: src/org/eclipse/albireo/core/SwingControl.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.albireo/org.eclipse.albireo.core/src/org/eclipse/albireo/core/SwingControl.java,v
retrieving revision 1.18
diff -c -3 -r1.18 SwingControl.java
*** src/org/eclipse/albireo/core/SwingControl.java	6 Feb 2008 22:37:46 -0000	1.18
--- src/org/eclipse/albireo/core/SwingControl.java	7 Feb 2008 18:58:07 -0000
***************
*** 228,250 ****
          // context.
          JApplet applet = new JApplet() {
  
-             private boolean validateCalled;
- 
              // Keep the sizes cache up to date.
-             public void invalidate() {
-                 super.invalidate();
-                 // Avoid updating the size cache until the first validate. This ensures that the initial cached
-                 // sizes are correct and that the relayout of the SwingControl isn't done until that time.
-                 // (See updateCachedAwtSizes()).
-                 if (validateCalled) {
-                     validate();
-                 }
-             }
- 
              protected void validateTree() {
                  super.validateTree();
                  updateCachedAWTSizes(getMinimumSize(), getPreferredSize(), getMaximumSize());
-                 validateCalled = true;
              }
          };
          frame.add(applet);
--- 228,237 ----


Back to the top