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

已做非空校验仍触发Null Pointer Exception的异常问题咨询

问题根因分析

你贴出的示例代码逻辑上不会触发这个空指针异常,出现该问题通常是以下几种实际场景导致的:

  • 场景1:实际运行的代码和你贴出的代码不一致,在while条件中没有把readLine()的返回值赋值给currentLine,而是两次调用readLine(),典型错误写法如下:
// 错误写法
while(reader.readLine() != null) {
    String currentLine = reader.readLine(); // 第二次读行,读到流末尾时直接返回null
    currentLine.trim();
}

该写法每轮循环会读取两行,当文件行数为奇数时,最后一次循环就会拿到null值触发空指针,是这类问题最常见的诱因。

  • 场景2:currentLine是类成员变量而非方法局部变量,且存在多线程同时修改该变量的情况:while条件判断currentLine不为空之后、执行trim()之前,其他线程把currentLine赋值为null,就会触发空指针。
  • 场景3:读取文件过程中文件被其他进程/线程修改、截断或删除,导致流提前读到末尾返回null,这类情况多出现于共享目录的文件读取场景。

修复方案

  1. 优先核对实际运行代码的循环逻辑,确保readLine()的返回值只读取一次且直接赋值给currentLine,和你贴出的示例代码保持一致
  2. 把currentLine改为方法内的局部变量,避免多线程篡改,如果必须用成员变量,要加同步锁保证判断和操作的原子性
  3. 读取文件前加文件存在、长度非空的校验,读取过程中锁定文件避免其他进程修改
  4. 极端场景兼容可以在循环体内再加一层非空校验:
while((currentLine = reader.readLine()) != null) {
    if (currentLine != null) {
        String trimmedLine = currentLine.trim();
        // 后续业务逻辑
    }
}

内容的提问来源于stack exchange,提问作者NEERAJ yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:36:03