已关闭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的代码分析规则,找到资源泄漏相关的选项,调整检查强度,或者手动忽略这个特定文件的警告。
- 很多时候是IDE缓存导致的误判,比如Eclipse执行
确认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
相关产品推荐
相关产品推荐

