对象从上下文中删除但不是显示

时间:2015-02-20 02:13:39

标签: java repast-simphony

我在一个简单的上下文(地理包)中有一个简单的Agent,它使用纬度和经度来表示空间。代理人应该在模型的第10次迭代中死亡。然后将其从上下文中删除。在模拟的第10次迭代中,代理停止执行其他方法(例如移动),因此我假设它已成功从上下文中删除/死亡,但它不会从模拟显示中删除(只是坐在那里) )。

为什么它会留在显示屏上,如何在显示屏上移除它?

更新:重播显示代码中存在错误。可以通过repast-interest@lists.sourceforge.net联系Eric Tatara获取修复文件,尽管在下一个发行版本中将删除所有错误。

public class Agent {
public Geography<Object> geography;
public Context<Object> context;
public int id;


public Agent (Context<Object>context, Geography<Object>geography) {
    this.geography= geography;
    this.context=context;   

}

public int getId() {
    return id;
}


public void setId(int id) {
    this.id = id;
}

@ScheduledMethod(start = 1, pick = 1, interval = 1)
public void otherMethods() {

}

@ScheduledMethod(start = 10, pick = 1, interval = 1)
public void die() {  
    Context context = ContextUtils.getContext(this);
    context.remove(this);

}

}

1 个答案:

答案 0 :(得分:2)

我认为您需要使用die()方法从地理位置删除代理。

repast code that handles removing agents from the display中,删除操作由与显示关联的Projection对象中的事件触发 - 在您的情况下为Geography。奇怪的是,Geography接口没有定义remove()方法,但是在DefaultGeography类中实现了一个。您的Geography实际上可能是DefaultGeography具体对象,因此您可以尝试在die()方法中添加以下内容:

@ScheduledMethod(start = 10, pick = 1, interval = 1)
public void die() {  
    Context context = ContextUtils.getContext(this);
    context.remove(this);
    ((DefaultGeography) geography).remove(this);

}

<强> 备注

  1. 您正在使用die()方法获取上下文,但已有 在构建Agent时引用它,所以这是 几乎肯定是多余的。
  2. 您需要确保您的显示器实际安排更新。默认情况下,它们是,但您应双击GUI左侧导航器窗格中的显示,并检查Schedule Details选项卡以确保显示更新(不是ONE_TIME