在事件上使用代理的方法

Posted

技术标签:

【中文标题】在事件上使用代理的方法【英文标题】:Using the agent's methods on events 【发布时间】:2018-06-03 14:36:34 【问题描述】:

我正在使用 anylogic 来构建随机移动汽车的模型。 在该模型中,我想使用变量和事件块收集有关代理(汽车)的一些信息。

在模型上,我希望 事件 将变量 carsLane 设置为当前在路上的汽车的车道,并且每 2 秒执行一次。

问题是,每次假设发生事件时,我都会收到“NullpointerException”错误,并且在我尝试使用的 Car 的每种方法上都会发生这种情况使用事件。

事件在主选项卡上,我在操作框上使用的代码: carsLane=Car.getLaneIndex();

On the image you can see the formation of the blocks and the code on the event's action box

我使用的 事件 是错误的还是其他原因?

感谢您的任何帮助。

【问题讨论】:

【参考方案1】:

这会让您感到困惑,但是您在模型中定义的 Agent Car 不是或不包含在 carSource 模块中创建的代理,因此执行 carLane=Car.anything 会给您一个错误,因为Car 代理可能是空的或不在任何车道上。

要解决这个问题,您需要做很多事情(我假设您在汽车资源中生成汽车的方式是道路上最多有 1 辆汽车......如果还有更多,你必须做一些不同的事情。

首先:创建一个具有汽车人口的新 Car 代理,我们称其为 thecar(使用代理调色板中的代理...而不是“汽车类型”),初始人口为 0。

此代理将是您创建的 Car 类型的扩展:

第二:在汽车来源中,将您的汽车添加到自定义人群中:

此外,您的汽车源将生成类型为 thecar 的汽车:

第三:在您的活动中,您现在可以执行以下操作: carLane=thecars.get(0).getLaneIndex();

我为您创建了模型...在这里找到它: https://ufile.io/5jkqu

【讨论】:

实际上我一次需要不止一辆车。我想要的项目是创建一个模型,该模型将始终检查当前在路上的任何汽车,如果第二车道上有另一辆车,则返回 true。我需要做些什么不同的事情才能使事件对在路上行驶的每辆汽车应用条件吗? -此外,您是否有可能进一步了解为什么在我的第一个模型中,代理 Car 不包含在 carSource 中创建的代理? 在这种情况下,您可以代替 thecars.get(0).getLaneIndex(): for(Thecar c : thecars) c.getLaneIndex();

以上是关于在事件上使用代理的方法的主要内容,如果未能解决你的问题,请参考以下文章

简述:js事件代理的7种方法

Vue---原生js委托事件

jQuery 的事件绑定和事件委托(事件代理)

IOC 控制反转Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )(代码片

封装Js事件代理方法

微服务之集成下