当前位置: 首页 > 知识库问答 >
问题:

Java--关闭扫描器和资源泄漏

公羊凌
2023-03-14

资源泄漏:“扫描”永远不会关闭。

因此,我在代码末尾添加了scan.close();来处理警告。

出现这个问题是因为我在同一个包中有其他类也使用scanner对象,而Eclipse告诉我分别关闭这些类中的scanner。然而,当我这样做时,它似乎关闭了所有的扫描器对象,并在运行时得到错误。

import java.util.Scanner;
public class test2 {
    public static void main(String [] args) {
        Scanner scan = new Scanner(System.in);
        int test = 0;
        do {    
            //Do stuff
            test = scan.nextInt();
            System.out.println(test);

            scanTest scanTest = new scanTest();
            scanTest.test();
        } while (test != 0);

        scan.close();       
    }
}

import java.util.Scanner;
public class scanTest { 
    public void test() {
        Scanner scanner = new Scanner(System.in);
        int blah = scanner.nextInt();
        System.out.println(blah);
        scanner.close();
    }
}

我遇到的一篇文章提到,当system.in关闭时,我不能重新打开。如果是这种情况,我是否只需要确保一个带有System.in的扫描器对象在程序末尾关闭,并@抑制其他类中的所有其他扫描器警告?或者这仍然会让所有扫描仪对象打开(不好)?

共有1个答案

邓昊天
2023-03-14

首先,这不是内存泄漏

其次,当关闭流包装器时,默认的实现是让它关闭它包装的流。这意味着当您第一次关闭扫描仪时(按照它所写的那样),是的,您关闭了System.In。

一般来说,如果要再次从System.In中读取,则希望避免关闭System.In。最好的方法取决于你的程序。

 类似资料:
  • 大家好,我的程序员们。 我有一些代码,spring工具套件编辑器的反应也不一样,也许你们一些聪明人知道为什么。 有人能告诉我为什么这是不可能的吗: 但这是!? 第一行代码给了我一个警告“Resource leak:unassigned closeable value is never close”,正如您所看到的,我在try/catch中使用了一个finally,如果对象不为空,它应该总是关闭对象

  • 我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用

  • 我正在读取一个文件并将其内容存储在字符串中。代码给了我一个警告:Resource leak:。我如何解决它?

  • 我正在编写一个程序,希望控制台输出用户输入的数字的剩余部分。但是,每次我编译代码时,控制台都会打印出来,我得到以下控制台错误: 我不确定控制台所说的“资源泄漏”是什么意思。我在几个不同的地方查找过它(包括API和其他堆栈溢出问题),我不确定为什么没有打印到控制台。我正在使用DrJava程序,以防有人想知道。 这里是我的代码供参考:

  • 为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?