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

Java使用Scanner时多处出现Resource leaked资源泄露报错如何解决

资源泄露报错Resource leaked解决方案
  • 该报错通常是IDE静态检测到实现了Closeable/AutoCloseable接口的非内存资源类对象(文件流、数据库连接、网络套接字、Native包装类等)未被正确释放触发,普通内存变量不会触发该报错,可先确认myFirstname、myObj的实际类型是否属于上述资源类。
  • 优先使用try-with-resources语法(Java 7+、C# 8+等主流语言版本均支持类似语法),资源会在代码块执行完毕后自动释放,无需手动调用关闭方法,Java示例如下:
// 错误写法:资源使用后未主动关闭,触发泄露警告
FileReader myFirstname = new FileReader("user-info.txt");
CustomResource myObj = new CustomResource();
// 业务逻辑
// 正确写法:try-with-resources自动管理资源释放
try (FileReader myFirstname = new FileReader("user-info.txt");
     CustomResource myObj = new CustomResource()) {
    // 业务逻辑
} catch (IOException e) {
    // 异常处理逻辑
}
  • 若使用不支持自动资源管理的旧版本语言,需在finally代码块中手动关闭资源,注意添加空指针判断避免异常:
FileReader myFirstname = null;
CustomResource myObj = null;
try {
    myFirstname = new FileReader("user-info.txt");
    myObj = new CustomResource();
    // 业务逻辑
} catch (IOException e) {
    // 异常处理
} finally {
    if (myObj != null) {
        try {
            myObj.close();
        } catch (IOException e) {
            // 资源关闭异常处理
        }
    }
    if (myFirstname != null) {
        try {
            myFirstname.close();
        } catch (IOException e) {
            // 资源关闭异常处理
        }
    }
}
  • 如果确认变量为普通字符串、POJO等非资源类型仍触发报错,属于IDE静态检测规则误报,可在对应代码行前添加对应注解抑制警告(Java中为@SuppressWarnings("resource")),或重置IDE的代码检测规则。

注意:仅在100%确认不存在资源泄露风险时再使用警告抑制方案,避免实际泄露导致的程序运行卡顿、资源耗尽问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:03