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.