You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic中Transporter执行存储操作后触发NullPointerException求助

AnyLogic中Store块触发NullPointerException的排查与解决思路

问题描述

我在AnyLogic模型中遇到NullPointerException错误。需求是Transporter从一处存储区取货,将货物存入A组存储区的空闲存储位,按从左到右顺序填充。因此将Store块的“Storage”属性设置为getFreeStorage函数的输出,该函数用于查找A组中最左侧的空闲存储区。运行模型时,Transporter成功取货并存入目标存储区,但离开时触发NullPointerException。

错误栈信息

Exception during discrete event execution:
NullPointerException
java.lang.NullPointerException
    at com.anylogic.libraries.modules.level_system.LevelDataStorage.getLevelData(Unknown Source)
    at com.anylogic.libraries.material_handling.LevelSystem.<init>(Unknown Source)
    at com.anylogic.libraries.material_handling.MHLSettings.c(Unknown Source)
    at com.anylogic.libraries.material_handling.MHLSettings.b(Unknown Source)
    at com.anylogic.libraries.material_handling.Store.b(Unknown Source)
    at com.anylogic.libraries.material_handling.Store$17.onExit(Unknown Source)
    at com.anylogic.libraries.modules.rack_system_module.RackPutInternal.c(Unknown Source)
    at com.anylogic.libraries.modules.rack_system_module.RackPutInternal$1.onExit(Unknown Source)
    at com.anylogic.libraries.modules.rack_system_module.RackCommandExecutor.a(Unknown Source)
    at com.anylogic.libraries.modules.rack_system_module.RackCommandExecutor$6.onExit(Unknown Source)
    at com.anylogic.libraries.processmodeling.SelectOutputOut.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.SelectOutputOut$1.onExit(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.c(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock$1.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.InPort.receiveImmediately(Unknown Source)
    at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.PlainTransfer$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.PlainTransfer$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.PlainTransfer$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.forwardReadyEntityNotification(Unknown Source)
    at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.forwardReadyEntityNotification(Unknown Source)
    at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.forwardReadyEntityNotification(Unknown Source)
    at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock$2.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock$2.action(Unknown Source)
    at com.anylogic.libraries.processmodeling.AsynchronousExecutor_xjal$a.execute(Unknown Source)
    at com.anylogic.engine.LibraryEventHandler$f.execute(Unknown Source)
    at com.anylogic.engine.Engine.a(Unknown Source)
    at com.anylogic.engine.Engine.nd(Unknown Source)
    at com.anylogic.engine.Engine$f.run(Unknown Source)

已尝试的排查手段

  • 创建新的Transporter fleet
  • 直接指定具体Storage而非使用getFreeStorage函数
  • 更换不同的Transporter代理
  • 让托盘自主移动(无报错,但不符合模型需求)

解决思路

1. 校验getFreeStorage函数的返回有效性

  • 确保函数在任何场景下都返回非null的Storage对象。若A组存储区全满,需添加逻辑处理(如触发模型暂停、抛出明确异常),避免null传入Store块。
  • 验证函数返回的Storage是否属于正确关联的仓储系统,确认其LevelDataStorage对象已初始化(错误栈指向该对象的getLevelData方法,说明该对象可能为null)。

2. 检查Store块的配置与后续逻辑

  • 查看Store块的「On exit」或「Post-processing」事件,确认没有访问未初始化的存储区关联数据。
  • 确认Transporter完成存储操作后,后续流程中引用的存储区对象未被意外销毁或置空。

3. 验证仓储系统的初始化完整性

  • 检查A组存储区对应的Level System是否正确初始化,确保所有Storage对象的关联数据(如LevelDataStorage)已正确绑定,无未初始化的情况。

4. 调试函数执行时机与对象状态

  • 在getFreeStorage函数中添加日志输出,记录每次返回的Storage对象ID与状态,确认Transporter离开时该对象是否仍有效(未被提前回收或释放)。

内容的提问来源于stack exchange,提问作者Francisco Marques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:10:40