自定义AGV_Transporter尺寸触发AnyLogic类型转换错误求助
问题场景
创建自定义AGV_Transporter代理作为运输机时,修改长、宽、高尺寸会触发以下类型转换错误:
Event Loop Exception Error getting custom type in EO_INDEX_ARG for Transporter - Agent Type class com.anylogic.objectmodel.elements.ActiveObjectClass cannot be cast to class com.anylogic.objectmodel.elements.graphical.OMEmbeddedObject (com.anylogic.objectmodel.elements.ActiveObjectClass is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @e350b40; com.anylogic.objectmodel.elements.graphical.OMEmbeddedObject is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @1e0b4072)
使用AnyLogic 8 Professional 8.8.5版本,Linux Ubuntu 22.04和Windows 11系统均出现该问题;尝试通过TransporterFleet块设置尺寸无效果,只能使用标准尺寸。
错误原因
该错误的核心原因是:自定义的AGV_Transporter代理继承的是普通ActiveObject类,而AnyLogic的可视化尺寸设置功能仅支持基于OMEmbeddedObject的内置运输器类型(如默认Transporter),直接修改普通ActiveObject的尺寸会触发类型强制转换失败。
解决方案
方案一:基于内置Transporter创建自定义代理(推荐)
这是符合AnyLogic运输器设计规范的方式,可正常使用可视化尺寸设置:
- 右键项目树 → 新建 → 代理 → 选择「从现有类型继承」
- 在类型选择下拉框中找到
com.anylogic.libraries.transportation.Transporter并选中 - 命名为
AGV_Transporter完成创建 - 打开该代理的属性面板,即可正常修改长、宽、高参数,不会触发错误
方案二:通过代码手动设置尺寸(适配已创建的普通ActiveObject代理)
如果不想重新创建代理,可通过代码强制设置尺寸:
- 打开
AGV_Transporter代理的「代码」标签页 - 在
onStartup代码块中添加以下代码(替换为你的自定义尺寸值):
setWidth(1.2); // 自定义宽度 setHeight(0.8); // 自定义高度 setDepth(0.6); // 自定义深度
- 保存后运行模型,代理尺寸会自动生效(属性面板的尺寸设置仍不可用,以代码为准)
方案三:修复TransporterFleet的尺寸设置问题
之前通过TransporterFleet设置无效果,需配合正确的代理配置:
- 确保TransporterFleet块中选择的代理是你自定义的
AGV_Transporter - 若使用方案一创建的代理:直接在代理属性中设置尺寸,Fleet创建的所有运输器会自动继承该尺寸
- 若使用方案二:代理的
onStartup代码会在Fleet创建运输器时自动执行,尺寸会生效
内容的提问来源于stack exchange,提问作者Егор Елманов

