如何在AnyLogic中修复NullPointerException

时间:2019-10-05 07:05:30

标签: nullpointerexception anylogic

一段时间以来,我一直在尝试修复NullPointerException,但我完全陷入了困境。它发生在“ seize”块中,但是我无法确定到底是什么引起了它。

由于我是初学者,因此我觉得这可能是我输入到seize块中的代码。

我正试图抓住另一个特工,并通过“ order”特工中包含1到8的值的参数将其发送到世界各地。

在检获单元上,我有以下代码:

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());
}

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

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)

预期结果是该设备将飞往代码中指定的GIS区域。每个区域的每个“ MoveTo”块都连接到Seize块。

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您使用的Seize块错误。您正在尝试告诉资源在seize对象内移动,但是这不是您的操作方式,请参阅有关此内容的一些教程。

相反,您使用资源来设置资源池(在您的情况下,似乎是KC30)。将其设置为有10个或更多个。

现在在“抓住”中,使您的订单从资源池中抓住1个KC30。如果您愿意,可以告诉它首先转向订购代理: enter image description here

要立即使KC30代理按顺序移动到某个区域,请在seize块之后使用“ MoveTo”块,并用您的代码将该订单(及其捕获的KC30)告诉您的世界区域。

PS:您的if语句可以用switch语句代替,它更优雅,更可靠,请检查一下:-)