【问题标题】:why this warning in this java program [duplicate]为什么这个java程序中的这个警告[重复]
【发布时间】:2015-02-23 19:55:55
【问题描述】:

我需要帮助,我遇到了类似的错误

Description                               Resource        Path                Location    Type  
Resource leak: 'input' is never closed    Methods.java    /piyush/src/piyush  line 7      Java Problem  

代码:

import java.util.Scanner;
public class Methods {


 public static void main(String[] args){
   Scanner input = new Scanner(System.in);
   System.out.print("what is your name ");
   String yourName = input.nextLine();
   System.out.println("hello " + yourName);
 }


 }

【问题讨论】:

  • 我认为信息很明确。 'input'的哪一部分永远不会关闭你不明白?

标签: java input java.util.scanner


【解决方案1】:

您应该在使用后关闭流。在你的情况下,添加

input.close();

就在最后一个System.out.println() 之后关闭您的Scanner 并消除警告。

【讨论】:

  • 事实上他应该在finally 块中关闭。
  • @m0skit0 是的,那么他使用的是黑暗时代的 Java 版本。 The try-with-resources Statement.
  • @m0skit0,你的意思是try{...}finally{input.close();}
  • 如果我必须使用以后的扫描仪怎么办?
  • @PiyushKashyap ,不。你已经释放了它消耗的任何资源。您必须创建一个新的Scanner。另外,请阅读我的答案的第一句话。
【解决方案2】:

您需要关闭扫描仪以释放所有系统资源。使用

input.close();

作为代码的最后一行。请参阅Closeable.close() javadoc 了解更多信息。

【讨论】:

  • 他应该在 finally 块中关闭更正确。
  • @m0skit0 是的,这将是正确的做法 - 但他确实需要添加适当的错误处理。
【解决方案3】:

您可以关闭Scanner,在这种情况下会很好,但这将关闭底层System.in 输入流并阻止您接受输入,以防您稍后从标准输入流中读取。

【讨论】:

  • 关闭底层输入流有什么问题?
  • 如果他不再使用Scanner,他应该关闭它,而不是忽略警告。
  • 修复错误往往比抑制/忽略它们更有效。
  • @Mustafasabir Closing System.in 将不允许用户在关闭扫描仪后接受输入。
  • @m0skit0 是的,因此答案中的“以防万一”。
【解决方案4】:

这不是错误,而是警告。错误/异常是指代码中存在错误(编译错误)或程序执行时出现问题(运行时异常)。

你应该总是关闭你使用的流,在你的情况下Scanner input:-

input.close();

可以忽略此警告,如果没有 close() ,它应该可以正常工作,但最好在使用后关闭资源。

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2022-06-26
    • 2014-11-02
    相关资源
    最近更新 更多