Как исправить исключение NullPointerException в AnyLogic - PullRequest
0 голосов
/ 05 октября 2019

Я уже некоторое время пытаюсь исправить исключение NullPointerException, и я совершенно сбит с толку. Это происходит в блоке 'захвата', но я не могу определить, что именно вызывает его.

У меня такое чувство, что это может быть код, который я ввел в блок захвата, из-за того, что я новичок.

Я пытаюсь захватить другого агента и отправить его в разные части мира через параметр в агенте 'order', который содержит значение от 1 до 8.

На захвате единицы Iиметь следующий код:

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)

Ожидаемые результаты состоят в том, что устройство полетит в область ГИС, указанную в коде. Каждый блок MoveTo для каждого региона подключается к блоку захвата.

Заранее спасибо.

1 Ответ

0 голосов
/ 05 октября 2019

Я думаю, что вы используете блок захвата неправильно. Вы пытаетесь заставить ресурс перемещаться в пределах объекта захвата, но это не то, как вы это делаете, см. Некоторые учебники по этому вопросу.

Вместо этого вы настраиваете пул ресурсов со своими ресурсами (кажется, что KC30в твоем случае). Настройте его на 10 или столько, сколько у вас есть.

Теперь в Seize сделайте ваш заказ на 1 KC30 из пула ресурсов. Вы можете указать ему сначала двигаться к агенту заказа, если вам нравится: enter image description here

Чтобы заставить агента KC30 перейти в регион с заказом сейчас, вы используете MoveTo"блокируйте после блока захвата и сообщайте свой регион (и его захваченный KC30) вашему региону мира с вашим кодом.

PS: ваши операторы if могут быть заменены на оператор switch, это более элегантнои безошибочно, проверьте это: -)

...