This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 197521 - UI-Error for some kind of third party components
Summary: UI-Error for some kind of third party components
Status: RESOLVED FIXED
Alias: None
Product: guibuilder
Classification: Unclassified
Component: Code (show other bugs)
Version: 7.0
Hardware: PC Windows 7 x64
: P2 normal (vote)
Assignee: issues@guibuilder
URL: http://www.jyloo.com
Keywords:
Depends on:
Blocks:
 
Reported: 2011-04-07 08:31 UTC by wzberger
Modified: 2011-04-26 15:07 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description wzberger 2011-04-07 08:31:28 UTC
We've created a component (JYTabbedPane) which dynamically adds sub-components when a related event occurs. In this case the sub component is a JYLabel which is used as tab title.

Unfortunately the event occurs while FormLAF temporary removed related keys from the UIDefaults which leads to the exception below.

UIDefaults.getUI() failed: no ComponentUI class for: de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$5[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,f
lags=0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,t
ext=,verticalAlignment=CENTER,verticalTextPosition=CENTER]
java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:712)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:742)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at org.jdesktop.swingx.plaf.LookAndFeelAddons.getUI(LookAndFeelAddons.java:308)
        at de.javasoft.swing.JYLabel.updateUI(JYLabel.java:76)
        at javax.swing.JLabel.<init>(JLabel.java:145)
        at javax.swing.JLabel.<init>(JLabel.java:175)
        at de.javasoft.swing.JYLabel.<init>(JYLabel.java:51)
        at de.javasoft.swing.JYLabel.<init>(JYLabel.java:46)
        at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$5.<init>(BasicJYTabbedPaneUI.java:1039)
        at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.addTab(BasicJYTabbedPaneUI.java:1039)
        at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.access$17(BasicJYTabbedPaneUI.java:1031)
        at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$4.propertyChange(BasicJYTabbedPaneUI.java:819)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:339)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:276)
        at java.awt.Component.firePropertyChange(Component.java:8132)
        at de.javasoft.swing.JYTabbedPane.firePropertyChange(JYTabbedPane.java:1345)
        at de.javasoft.swing.JYTabbedPane.insertTab(JYTabbedPane.java:386)
        at org.netbeans.modules.form.layoutsupport.delegates.JTabbedPaneSupport.addComponentsToContainer(JTabbedPaneSupport.java:259)
        at org.netbeans.modules.form.layoutsupport.LayoutSupportManager.addComponentsToContainer(LayoutSupportManager.java:668)
        at org.netbeans.modules.form.VisualReplicator.addComponent(VisualReplicator.java:391)
        at org.netbeans.modules.form.VisualReplicator.updateAddedComponents(VisualReplicator.java:357)
        at org.netbeans.modules.form.FormDesigner$FormListener.run(FormDesigner.java:2452)
        at org.netbeans.modules.form.FormLAF$3.run(FormLAF.java:329)
        at org.openide.util.Mutex.doEventAccess(Mutex.java:1361)
        at org.openide.util.Mutex.readAccess(Mutex.java:271)
        at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:312)
        at org.netbeans.modules.form.FormDesigner$FormListener.processEvents(FormDesigner.java:2377)
        at org.netbeans.modules.form.FormDesigner$FormListener.formChanged(FormDesigner.java:2343)
        at org.netbeans.modules.form.FormModel.fireEvents(FormModel.java:1296)
        at org.netbeans.modules.form.FormModel.fireEventBatch(FormModel.java:1269)
        at org.netbeans.modules.form.FormModel.firePendingEvents(FormModel.java:1232)
        at org.netbeans.modules.form.FormModel.access$000(FormModel.java:68)
        at org.netbeans.modules.form.FormModel$2.run(FormModel.java:1212)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:148)
        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)

For some reason the issue does *not* occur when the component type (JYLabel) already exists in the form - before adding JYTabbedPane.

After some investigations what's going wrong, the issue seems to be caused by the FormLAF.useDesignerLookAndFeel(...) method which temporary removes keys from the UIDefaults. While the keys are removed our component tries to create sub-components and fails.

Related code line from FormLAF.useDesignerLookAndFeel:
  defaults.keySet().removeAll(netbeansDefaults.keySet());

The issue also occurs with NetBeans 6.9.

Thanks,
Wolfgang
Comment 1 Jan Stola 2011-04-26 14:53:27 UTC
I was able to reproduce this issue with the latest NetBeans build. It seems to be caused by the fact that JYTabbedPane modifies UIDefaults when a new tab is added. Our look and feel-related hacks do not expect this. The relevant stacktrace is

javax.swing.UIDefaults.put(UIDefaults.java:329)
o.n.m.form.FormLAF$DelegatingDefaults.put(FormLAF.java:725)
org.jdesktop.swingx.plaf.LookAndFeelAddons.loadDefaults
  (LookAndFeelAddons.java:140)
org.jdesktop.swingx.plaf.AbstractComponentAddon.initialize
  (AbstractComponentAddon.java:51)
org.jdesktop.swingx.plaf.LookAndFeelAddons.contribute
  (LookAndFeelAddons.java:260)
de.javasoft.synthetica.addons.SyntheticaAddons.contribute
  (SyntheticaAddons.java:212)
de.javasoft.swing.JYLabel.<clinit>(JYLabel.java:38)
de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.addTab
  (BasicJYTabbedPaneUI.java:1029)
de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.access$17
  (BasicJYTabbedPaneUI.java:1021)
de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$4.propertyChange
  (BasicJYTabbedPaneUI.java:809)
java.beans.PropertyChangeSupport.firePropertyChange
  (PropertyChangeSupport.java:339)
java.beans.PropertyChangeSupport.firePropertyChange
  (PropertyChangeSupport.java:276)
java.awt.Component.firePropertyChange(Component.java:8132)
de.javasoft.swing.JYTabbedPane.firePropertyChange(JYTabbedPane.java:1345)
de.javasoft.swing.JYTabbedPane.insertTab(JYTabbedPane.java:386)
o.n.m.form.layoutsupport.delegates.JTabbedPaneSupport.addComponentsToContainer
  (JTabbedPaneSupport.java:259)
o.n.m.form.layoutsupport.LayoutSupportManager.addComponents
  (LayoutSupportManager.java:538)
o.n.m.form.FormModel.addVisualComponent(FormModel.java:459)
o.n.m.form.MetaComponentCreator.addVisualComponent2
  (MetaComponentCreator.java:978)
o.n.m.form.MetaComponentCreator.addPrecreatedComponent
  (MetaComponentCreator.java:363)
o.n.m.form.HandleLayer$NewComponentDrag.end(HandleLayer.java:3145)
o.n.m.form.HandleLayer$ComponentDrag.end(HandleLayer.java:2479)
o.n.m.form.HandleLayer.endDragging(HandleLayer.java:1263)
o.n.m.form.HandleLayer.mousePressed(HandleLayer.java:1954)
...
Comment 2 Jan Stola 2011-04-26 15:07:02 UTC
Fixed - addPrecreatedComponent() uses FormLAF block by now.

Modified file: http://hg.netbeans.org/jet-main/rev/59ef92f67af6