AnyLogic 8不支持DataUpdater、ActiveObject类编译报错解决方案
AnyLogic 6.6旧模型迁移至8.7.12版本编译修复指南
一、废弃类适配实现正常编译
针对DataUpdater()、ActiveObject()两个已移除类的报错,按以下规则替换即可:
ActiveObject()类替换:AnyLogic 7及以后版本已将代理基类统一重命名为Agent,全局搜索所有代码中ActiveObject的类型声明、构造调用,全部替换为Agent即可。8.x版本的Agent类构造入参、内置方法和旧版ActiveObject完全兼容,替换后不会出现参数匹配类报错。DataUpdater()类替换:该类是6.x版本专属的数据集定时更新工具,8.x版本已将其功能整合进原生事件组件,无需单独实例化。找到所有new DataUpdater(...)的代码段,记录其中配置的更新间隔、数据写入逻辑后直接删除该实例化语句;在模型编辑画布新建循环触发类型的事件,触发间隔填原DataUpdater配置的间隔值,事件的「行动」栏填入原数据写入逻辑,直接调用数据集的add()/set()方法写入对应统计值即可。
二、update(DataSet)类报错修复
该类报错和DataUpdater的废弃直接关联:6.x版本中DataUpdater会自动调用update(DataSet)方法强制刷新绑定的数据集和关联图表,8.x版本已移除该带参方法,按以下规则修改:
- 所有代码中出现
update(你的数据集对象名)的调用,整行替换为你的数据集对象名.commit();即可。commit()是8.x版本数据集的原生方法,作用是将暂存的新数据同步到所有绑定的统计组件、可视化图表,不需要传入任何参数。 - 不要使用旧迁移教程中提到的
forceUpdate()方法,该方法在8.7.12版本中已被标记为废弃,虽然不会触发编译报错,但会大幅提升模型运行时的渲染开销,容易造成卡顿。
批量修改技巧:使用AnyLogic编辑器的全局搜索替换功能(快捷键
Ctrl+H)先批量替换所有ActiveObject关键字为Agent,再搜索DataUpdater、update(两个关键字逐个核对修改,不需要逐段翻找代码,千行级规模的旧模型通常10分钟内即可处理完所有编译错误。
内容的提问来源于stack exchange,提问作者Daniil K
相关产品推荐
相关产品推荐

