多Agent单队列按截止日期优先级调度的代码报错问题求助
问题分析与解决方案
你写的代码-agent.due_date_wb.due_date_spc22_1.getTime();的优先级排序逻辑方向是对的(用负时间戳让截止日期更早的Agent优先进入工序),但编译报错大概率是变量路径错误或对象未初始化导致的,以下是具体排查和修复步骤:
1. 核对Agent类的变量定义
- 确认你的
boltAgent类中确实存在due_date_wb属性,且该属性内部有due_date_spc22_1这个Date类型字段。如果截止日期是直接定义在boltAgent中的(无嵌套对象),代码应简化为:-agent.due_date.getTime(); - 必须保证Agent进入队列前,
due_date_wb和due_date_spc22_1已完成赋值(比如在Source的On exit事件或Arrival触发代码中赋值),未初始化的对象调用方法会触发空指针异常。
2. 修正队列优先级代码
如果确实是嵌套对象结构,为避免空指针报错,建议给代码增加空值判断:
agent.due_date_wb != null && agent.due_date_wb.due_date_spc22_1 != null ? -agent.due_date_wb.due_date_spc22_1.getTime() : Long.MAX_VALUE;
这段代码会在嵌套对象或日期字段为空时,将该Agent优先级设为最低(Long.MAX_VALUE),既避免报错,又不影响其他正常赋值Agent的排序逻辑。
3. 根据编译报错提示精准修复
- 若提示
cannot find symbol:检查变量名拼写是否正确,或该属性是否真的存在于boltAgent类中(比如大小写错误、字段名写错)。 - 若提示
null pointer access:确认在Agent进入队列前,due_date_wb和due_date_spc22_1已被正确初始化赋值。
内容的提问来源于stack exchange,提问作者Figa Wafi
相关产品推荐
相关产品推荐

