AnyLogic道路交通模型触发NullPointerException且JAR无源码附件求助
问题:AnyLogic道路交通模型运行中抛出模糊的NullPointerException异常
异常情况
模型并非立即报错,可正常运行60-800模型秒后抛出NullPointerException,堆栈跟踪无具体源码位置:
Exception during discrete event execution: NullPointerException java.lang.NullPointerException at com.anylogic.libraries.road.Car_xjal.g(Unknown Source) at com.anylogic.libraries.road.Car_xjal.al(Unknown Source) at com.anylogic.libraries.road.Car_xjal.a(Unknown Source) at com.anylogic.libraries.road.Car_xjal.on_SegmentEndEvent_xjal(Unknown Source) at com.anylogic.libraries.road.Car_xjal$SegmentEndEvent.execute(Unknown Source) at com.anylogic.engine.Engine.n(Unknown Source) at com.anylogic.engine.Engine.cl(Unknown Source) at com.anylogic.engine.Engine$n.run(Unknown Source)
调试限制
尝试设置断点调试时,系统提示相关库无源码附件:
The JAR file C:\Program Files\AnyLogic 8.8 Professional\plugins\com.anylogic.road_traffic_library_8.8.1.202210270952\lib\RoadTrafficLibrary.jar has no source attachment. You can attach a source by clicking Attach Source below
偶尔错误提示的无源码附件路径会变为C:\Program Files\AnyLogic 8.8 Professional\jre\lib\jrt-fs.jar
可能的解决方案
1. 排查车辆与路段交互的异常场景
从堆栈看异常触发在on_SegmentEndEvent_xjal,即车辆到达路段末端时出现问题,重点检查:
- 是否存在动态删除路段的操作:若模型运行中删除了车辆当前行驶的路段,车辆到达末端时会找不到后续路径或路段引用,触发空指针。
- 路径规划的异常:比如车辆的目的地路段被移除,或路径计算返回空值,车辆切换路段时触发空指针。
- 自定义车辆行为的冲突:如果扩展了
Car类的自定义代码,检查是否在路段结束事件中引用了未初始化的对象,或修改了AnyLogic库依赖的内部变量。
2. 绕过源码缺失的调试限制
即使没有库源码,也可通过以下方式定位问题:
- 启用AnyLogic的跟踪日志:在模型运行配置中开启详细日志,重点记录车辆的路段切换事件、路径变化、对象创建/销毁信息,通过日志定位触发异常的具体车辆和场景。
- 添加自定义监控:在模型中加入代码,记录每辆车辆的当前路段、下一路段、路径信息,在异常触发前打印数据。比如在
Car的onBeforeMove或自定义事件中加入:if (getCurrentSegment() != null) { traceln("Vehicle " + getIndex() + " on segment: " + getCurrentSegment().getName() + ", next segment: " + (getNextSegment() != null ? getNextSegment().getName() : "null")); } - 重现最小化场景:逐步简化模型,移除非必要元素(如复杂交通控制、动态路段修改),直到异常稳定重现,缩小问题范围。
3. 检查AnyLogic版本与库兼容性
- 确认AnyLogic 8.8 Professional是否存在道路交通库的已知bug:查看版本更新日志,确认8.8后续版本是否修复了类似空指针问题,考虑升级到最新兼容版本。
- 验证模型文件是否损坏:将模型核心元素(道路网络、车辆、交通控制)复制到新的AnyLogic项目中运行,排除项目文件损坏导致的异常。
4. 处理JAR附件提示异常
针对jrt-fs.jar的提示,这是JRE系统库,无需附加源码。重点关注RoadTrafficLibrary.jar的问题:
- 检查安装目录下的该JAR文件是否完整,若损坏可重新安装AnyLogic修复。
- 若需要调试库代码,可联系AnyLogic官方获取对应版本的道路交通库源码(部分专业版用户可申请)。
内容的提问来源于stack exchange,提问作者Joseph Tso
相关产品推荐
相关产品推荐

