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

扫描器useLocale资源泄漏

红朝
2023-03-14

大家好,我的程序员们。

我有一些代码,spring工具套件编辑器的反应也不一样,也许你们一些聪明人知道为什么。

File inputFile = new File(System.getProperty("user.home") + "/Desktop/Input.txt");
    Scanner sc = null;
    double payment=0;
    try {
        sc = new Scanner(inputFile).useLocale(Locale.ENGLISH);
        //sc = new Scanner(inputFile)
        //sc.useLocale(Locale.ENGLISH);
        payment = sc.nextDouble();
    } catch (Exception e) {
    } finally {
        if (sc != null) {
            sc.close();
        }
    }

有人能告诉我为什么这是不可能的吗:

Scanner sc = new Scanner(inputFile).useLocale(Locale.ENGLISH);

但这是!?

Scanner sc = new Scanner(inputFile);
sc.useLocale(Locale.ENGLISH)

第一行代码给了我一个警告“Resource leak:unassigned closeable value is never close”,正如您所看到的,我在try/catch中使用了一个finally,如果对象不为空,它应该总是关闭对象

提前谢谢你。

共有1个答案

巫化
2023-03-14

这是编译器在警告你一些它不理解(或者更确切地说是不能理解)的东西。

调用useLocale()时,将返回调用它的同一scanner实例。但是,编译器不能知道这一点,并发出警告。如果该方法返回不同的扫描器对象,则资源泄漏将是有效的,因为原始的扫描器对象将在未关闭的情况下消失。

一个毫无根据的警告,你可以忽略。

 类似资料:
  • 资源泄漏:“扫描”永远不会关闭。 因此,我在代码末尾添加了来处理警告。 出现这个问题是因为我在同一个包中有其他类也使用scanner对象,而Eclipse告诉我分别关闭这些类中的scanner。然而,当我这样做时,它似乎关闭了所有的扫描器对象,并在运行时得到错误。 我遇到的一篇文章提到,当关闭时,我不能重新打开。如果是这种情况,我是否只需要确保一个带有System.in的扫描器对象在程序末尾关闭,

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

  • 我正在看一些Java教程,对使用扫描器时的资源泄露警告感到疑惑。 我知道我可以关闭它,但视频中的人没有得到警告,即使他使用的是完全相同的代码,为什么呢?

  • 在这段代码的第4行,有一个资源泄漏警告。输入=扫描(); 我想要一个从用户那里获取整数的方法。它会要求用户重新输入一个整数值,如果他以前输入的值是不可接受的,即字符、规格。字符等。此外,我想在返回所取的int之前关闭扫描仪。 如何解决这个问题?

  • 把这部分的log摘取出来. 以org.nutz.resource下的log为准 2015-03-30 10:49:49,383 org.nutz.resource.Scans.<init>(Scans.java:484) DEBUG - Locations for Scans: [JarResourceLocation [jarPath=D:\nutzbook\apache-tomcat-8.0.