If you’re getting a NullPointerException stacktrace like the one below while using the Netbeans Visual Library to create your own GraphScene, check that your adding your widgets propertly to scene. A good idea is to use LayerWidgets, declaring them in the constructor of your GraphScene:
1
2
3
4
1
2
3
4
<span class='line'>mainLayer = new LayerWidget(this);
</span><span class='line'>addChild(mainLayer);
</span><span class='line'>connectionLayer = new LayerWidget(this);
</span><span class='line'>addChild(connectionLayer);</span>
and then add the widgets to those layers in attachNodeWidget and attachEdgeWidget:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<span class='line'>@Override
</span><span class='line'> protected Widget attachNodeWidget(String node) {
</span><span class='line'> LabelWidget w = new LabelWidget(this, node);
</span><span class='line'> w.setBorder(BORDER4);
</span><span class='line'> w.getActions().addAction(createSelectAction());
</span><span class='line'> w.getActions().addAction(createObjectHoverAction());
</span><span class='line'> w.getActions().addAction(ActionFactory.createMoveAction());
</span><span class='line'> this.mainLayer.addChild(w);
</span><span class='line'> return w;
</span><span class='line'> }
</span><span class='line'>
</span><span class='line'> @Override
</span><span class='line'> protected Widget attachEdgeWidget(String edge) {
</span><span class='line'> ConnectionWidget w = new ConnectionWidget(this);
</span><span class='line'> w.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);
</span><span class='line'> this.connectionLayer.addChild(w);
</span><span class='line'> return w;
</span><span class='line'> }</span>
The stacktrace:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<span class='line'>java.lang.NullPointerException
</span><span class='line'>at sun.font.FontDesignMetrics$MetricsKey.init(FontDesignMetrics.java:199)
</span><span class='line'>at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:267)
</span><span class='line'>at sun.java2d.SunGraphics2D.getFontMetrics(SunGraphics2D.java:973)
</span><span class='line'>at org.netbeans.api.visual.widget.LabelWidget.calculateClientArea(LabelWidget.java:260)
</span><span class='line'>at org.netbeans.api.visual.widget.Widget.calculatePreferredBounds(Widget.java:1005)
</span><span class='line'>at org.netbeans.api.visual.widget.Widget.getPreferredBounds(Widget.java:981)
</span><span class='line'>at org.netbeans.modules.visual.graph.layout.HierarchicalLayout$BuildDatastructure.run(HierarchicalLayout.java:262)
</span><span class='line'>at org.netbeans.modules.visual.graph.layout.HierarchicalLayout$AlgorithmPart.start(HierarchicalLayout.java:171)
</span><span class='line'>at org.netbeans.modules.visual.graph.layout.HierarchicalLayout.performGraphLayout(HierarchicalLayout.java:206)
</span><span class='line'>at org.netbeans.api.visual.graph.layout.GraphLayout.layoutGraph(GraphLayout.java:116)
</span><span class='line'>at org.netbeans.api.visual.layout.LayoutFactory$1.performLayout(LayoutFactory.java:284)
</span><span class='line'>at org.netbeans.api.visual.layout.SceneLayout$LayoutSceneListener.sceneValidated(SceneLayout.java:122)
</span><span class='line'>at org.netbeans.api.visual.widget.Scene.validate(Scene.java:420)
</span><span class='line'>at org.netbeans.api.visual.widget.SceneComponent.addNotify(SceneComponent.java:88)
</span><span class='line'>at java.awt.Container.addImpl(Container.java:1062)
</span><span class='line'>at java.awt.Container.add(Container.java:352)
</span><span class='line'>...
</span><span class='line'>...
</span><span class='line'>...
</span><span class='line'>at org.openide.windows.CloneableOpenSupport.openCloneableTopComponent(CloneableOpenSupport.java:197)
</span><span class='line'>at org.openide.windows.CloneableOpenSupport$1.run(CloneableOpenSupport.java:98)
</span><span class='line'>at org.openide.util.Mutex.doEvent(Mutex.java:1335)
</span><span class='line'>at org.openide.util.Mutex.writeAccess(Mutex.java:452)
</span><span class='line'>at org.openide.windows.CloneableOpenSupport.open(CloneableOpenSupport.java:95)
</span><span class='line'>at org.openide.actions.OpenAction.performAction(OpenAction.java:81)
</span><span class='line'>at org.openide.util.actions.NodeAction$DelegateAction$1.run(NodeAction.java:581)
</span><span class='line'>at org.netbeans.modules.openide.util.ActionsBridge.doPerformAction(ActionsBridge.java:77)
</span><span class='line'>at org.openide.util.actions.NodeAction$DelegateAction.actionPerformed(NodeAction.java:577)
</span><span class='line'>at org.openide.explorer.view.TreeView$PopupSupport.mouseClicked(TreeView.java:1492)
</span><span class='line'>at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
</span><span class='line'>at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
</span><span class='line'>at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
</span><span class='line'>at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
</span><span class='line'>at java.awt.Component.processMouseEvent(Component.java:6129)
</span><span class='line'>at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
</span><span class='line'>at java.awt.Component.processEvent(Component.java:5891)
</span><span class='line'>at java.awt.Container.processEvent(Container.java:2102)
</span><span class='line'>at java.awt.Component.dispatchEventImpl(Component.java:4497)
</span><span class='line'>at java.awt.Container.dispatchEventImpl(Container.java:2160)
</span><span class='line'>at java.awt.Component.dispatchEvent(Component.java:4327)
</span><span class='line'>at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4366)
</span><span class='line'>at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4039)
</span><span class='line'>at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3960)
</span><span class='line'>at java.awt.Container.dispatchEventImpl(Container.java:2146)
</span><span class='line'>at java.awt.Window.dispatchEventImpl(Window.java:2440)
</span><span class='line'>at java.awt.Component.dispatchEvent(Component.java:4327)
</span><span class='line'>[catch] at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
</span><span class='line'>at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:104)
</span><span class='line'>at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:300)
</span><span class='line'>at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:210)
</span><span class='line'>at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:200)
</span><span class='line'>at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:195)
</span><span class='line'>at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:187)
</span><span class='line'>at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)</span>
Hopefully if you run into the same exception this will help you solve it.
Posted by Ruben Laguna
Apr 30 th , 2009 12:00 am
addchild , connectionwidget , fontdesignmetrics , labelwidget , layer , layerwidget , library , metricskey , netbeans , nullpointerexception , visual , widget
« Add Platform Sources using Netbeans Platform Manager
Painting LabelWidgets on top of the ConnectionWidget - Netbeans Visual Library »