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

开发Dijkstra算法时AWT-EventQueue-0线程出现NullPointerException求助

Dijkstra算法Java实现空指针异常修复方案
  • 异常本质是代码132/133行涉及的某个对象未完成初始化就被调用了属性/方法,结合报错线程是AWT-EventQueue-0,说明异常是UI交互触发算法运行时抛出,优先按以下顺序排查:
    1. 检查算法入参:确认从UI组件获取的起点、终点、图结构数据是否加载完成,是否存在传入null值的情况
    2. 检查132/133行涉及的所有变量:如果行内有自定义节点类的方法调用(比如node.getId()、edge.getWeight()),先确认调用方法的node、edge对象是否为null
    3. 检查Dijkstra核心数据结构:
      • 距离数组/Map是否所有节点都完成了初始值赋值,未初始化的节点距离值如果存为null,读取时会触发空指针
      • 优先队列中存储的节点对象是否有null值,入队前未做非空校验的情况下,出队调用方法直接报错
      • 邻接表中是否存在null边条目,遍历邻接边时没有跳过null值就调用方法会抛错
  • 快速调试方法:

在132行开头对所有涉及的对象逐一加非空判断打印,比如行内代码为int newDist = dist[current] + edge.getWeight();,就添加if (edge == null) System.out.println("当前遍历边为空");、if (dist[current] == null) System.out.println("当前节点距离未初始化");,运行一次即可定位到具体为null的对象。

  • 常见实现踩坑点:
    很多开发者实现Dijkstra时只会给起点初始化距离值,其余节点距离默认留空为null,遍历到未访问节点时读取距离值就会触发空指针,需要初始化时给所有节点的距离统一赋值为无穷大(比如Integer.MAX_VALUE)。

内容的提问来源于stack exchange,提问作者João Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:03