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

已关闭Scanner仍提示Resource leak: 'input' is never closed问题求助

已调用Scanner.close()仍出现“Resource leak: 'input' is never closed”提示的解决办法

我写了一段Java代码,明明在使用完Scanner后调用了input.close(),但IDE一直提示“Resource leak: 'input' is never closed”的资源泄漏警告,代码运行没问题,但这个提示一直消不掉。问过教授和助教没解决,教授说可能是编译器的问题,求解决办法。

代码如下:

import java.util.Scanner;

public class MultipleAdder {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("정수를 몇 개 더하시겠습니까? ");
        int n = input.nextInt();
        System.out.print(n + "개의 정수를 차례로 입력하시오: ");
        int i;
        int sum = 0;
        for (i=0; i<n; i++)
            sum = sum + input.nextInt();
        System.out.println("정수의 합 = " + sum);
        input.close();
    }
}

可能的原因和解决方法:

  • 使用try-with-resources自动管理资源
    Java 7及以上推荐用try-with-resources语句,它会自动在代码块结束时关闭资源,能让IDE的静态检查明确识别资源已被正确释放,从根源避免误判:

    import java.util.Scanner;
    
    public class MultipleAdder {
        public static void main(String[] args) {
            try (Scanner input = new Scanner(System.in)) {
                System.out.print("정수를 몇 개 더하시겠습니까? ");
                int n = input.nextInt();
                System.out.print(n + "개의 정수를 차례로 입력하시오: ");
                int sum = 0;
                for (int i=0; i<n; i++)
                    sum += input.nextInt();
                System.out.println("정수의 합 = " + sum);
            }
        }
    }
    
  • 清理IDE缓存并检查配置

    • 很多时候是IDE缓存导致的误判,比如Eclipse执行Project > Clean,IntelliJ执行File > Invalidate Caches...,清理后重新编译项目。
    • 检查IDE的代码分析规则,找到资源泄漏相关的选项,调整检查强度,或者手动忽略这个特定文件的警告。
  • 确认JDK版本和构建环境

    • 确保项目使用的JDK版本是7及以上,try-with-resources需要这个版本支持;如果用的是旧版本,升级JDK并重新配置项目构建路径。
    • 检查是否混用了不同版本的JDK,比如项目依赖的JDK和IDE默认的JDK版本不一致,统一版本后重新编译。
  • 添加注解手动忽略警告
    如果以上方法都无效,可以给Scanner变量添加@SuppressWarnings("resource")注解,强制IDE跳过这个警告:

    import java.util.Scanner;
    
    public class MultipleAdder {
        public static void main(String[] args) {
            @SuppressWarnings("resource")
            Scanner input = new Scanner(System.in);
            System.out.print("정수를 몇 개 더하시겠습니까? ");
            int n = input.nextInt();
            System.out.print(n + "개의 정수를 차례로 입력하시오: ");
            int sum = 0;
            for (int i=0; i<n; i++)
                sum += input.nextInt();
            System.out.println("정수의 합 = " + sum);
            input.close();
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:03:40