Ruben Laguna’s blog

NullPointerException in FontDesignMetrics$MetricsKey.init When Using Netbeans Visual Library

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.

Comments

Copyright © 2015 - Ruben Laguna - Powered by Octopress