首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AnyLogic中修复NullPointerException

如何在AnyLogic中修复NullPointerException
EN

Stack Overflow用户
提问于 2019-10-05 15:05:30
回答 1查看 1.7K关注 0票数 0

我尝试修复NullPointerException已经有一段时间了,我完全被难住了。它发生在一个“抢占”块中,但我不能确定到底是什么导致了它。

我有一种感觉,这可能是因为我是一个初学者,所以我已经将代码输入到了block块中。

我正在尝试获取另一个代理,并通过“order”代理中包含从1到8的值的参数将其发送到世界的不同部分。

在抢占单元上,我有以下代码:

代码语言:javascript
复制
if (agent.missionLocation <= 1); KC30resource1.moveTo(main.AsiaRegion.randomPointInside());
{
if (agent.missionLocation <= 2); KC30resource1.moveTo(main.AfricaRegion.randomPointInside());
}
{
if (agent.missionLocation <= 3); KC30resource1.moveTo(main.MiddleeastRegion.randomPointInside());
}
{
if (agent.missionLocation <= 4); KC30resource1.moveTo(main.EuropeRegion.randomPointInside());
}
{
if (agent.missionLocation <= 5); KC30resource1.moveTo(main.NAmericaRegion.randomPointInside());
}
{
if (agent.missionLocation <= 6); KC30resource1.moveTo(main.SAmericaRegion.randomPointInside());
}
{
if (agent.missionLocation <= 7); KC30resource3.moveTo(main.AustraliaNzRegion.randomPointInside());
}
{
if (agent.missionLocation <= 8); KC30resource2.moveTo(main.PacificRegion.randomPointInside());
}

这可能是它发生的原因吗?

代码语言:javascript
复制
Exception during discrete event execution:

NullPointerException

java.lang.NullPointerException

    at com.anylogic.libraries.processmodeling.Seize.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize$16.a(Unknown Source)

    at com.anylogic.libraries.processmodeling.Seize$16.action(Unknown Source)

    at com.anylogic.libraries.processmodeling.AsynchronousExecutor_xjal.executeActionOf(Unknown Source)

    at com.anylogic.engine.EventTimeout.execute(Unknown Source)

    at com.anylogic.engine.Engine.f(Unknown Source)

    at com.anylogic.engine.Engine.gj(Unknown Source)

    at com.anylogic.engine.Engine.e(Unknown Source)

    at com.anylogic.engine.Engine$m.run(Unknown Source)

预期的结果是单元将飞到代码中指定的GISregion。每个区域的每个“MoveTo”块都连接到抢占块。

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2019-10-05 22:20:05

我认为您使用的抢占块是错误的。您正在尝试告诉资源在抢占对象中移动,但这不是您执行此操作的方式,请参阅有关这方面的教程。

相反,您需要用您的资源设置资源池(在您的例子中似乎是KC30 )。将其设置为10个或您拥有的任何数量。

现在在Seize中,让您的订单从资源池中抢占1个KC30。如果您愿意,您可以告诉它首先移动到订单代理:

要使KC30代理现在移动到具有订单的区域,您可以在抢占块之后使用"MoveTo“块,并使用您的代码将订单(及其捕获的KC30)告知您的世界区域。

PS:您的if语句可以替换为switch语句,它更优雅、更可靠,请查看:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58246147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档