Print

Print


Hi

I am new to MASON (and this list) and working through the tutorial (student schoolyard cliques) and "tinkering" with the code in a bid to learn how to use MASON, etc, etc.

The code I have is upto p.41 in the mason manual (so new MovablePortrayal2D, new CircledPortrayal2D, new LabelledPortrayal2D have just been added).

So the code I am working with resembles the code in this tutorial very much, except that I have made the "students" fixed nodes in the ContinuousPortrayal2D. 
I have also made it possible for the students/nodes to be removed (whilst the simulation is paused, etc) whilst selecting/inspecting the individual nodes via the GUI.

I do the "removing" of nodes by iterating over students.buddies and removing the desired object via .removeNode, and I then .remove the same object from students.yard.

So far, so good: I run the simulation, pause, select a node, remove it (via boolean inspector property), the display updates, and the edges and node vanish.

My problem: As soon as I select another "node" in the display, I get a "NullPointerException" with messages:


at sim.portrayal.simple.MovablePortrayal2D.handleMouseEvent(MovablePortrayal2D.java:81)
at sim.display.Display2D.handleMouseEvent(Display2D.java:1846)
at sim.display.Display2D$6.mousePressed(Display2D.java:1208)
at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
[...]

I suspect this is because I "removed" an object, whilst it was being "pointed to" (selected in the GUI).

My question: is there a "good" way to remove objects from the display, and how could I handle an event such as the above?
Many thanks, C.