当前位置:   article > 正文

Java scanner is never closed解决方法_scanner is never closed怎么解决

scanner is never closed怎么解决

如果你是觉得图中的警告太多太烦了,才来到这里的,建议你看下去

先上解决方法:

在主方法中创建一个Scanner类对象,然后把这个Scanner类对象交给各个方法去调用,把Scanner类对象作为参数传递出去,在主方法中调用close()关闭。

其他所有类中不使用close()方法。

尽量全局使用一个scanner对象,在确定不再使用输入功能的时候只关闭一次scanner。
————————————————
版权声明:本文为CSDN博主「.长安忆.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_64423480/article/details/130444849

 大概像代码那样操作:

  1. public class ForSale {
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. String s = Shuru(sc);
  5. int day = Shuru2(sc)
  6. sc.close();
  7. }
  8. //输入产品生产日期
  9. public static String Shuru(Scanner sc)
  10.     {
  11.         System.out.println("请输入所需产品的生产日期(格式如2008-08-08):");
  12.         String s = sc.next();
  13.         return s;
  14.     }
  15. //输入产品保质期
  16.     public static String Shuru2(Scanner sc)
  17.     {
  18.         System.out.println("请输入所需产品的保质期:");
  19.         String s = sc.next();
  20.         return s;
  21.     }

 --------------------------------------------------------------------------------------------------------------------------------

我原本为了方便,直接将Scanner实例化对象放在了方法里

  1.     public static String Shuru()
  2.     {
  3.         Scanner sc = new Scanner(System.in);
  4.         System.out.println("请输入所需产品的生产日期(格式如2008-08-08):");
  5.         String s = sc.next();
  6.         sc.close;
  7.         return s;
  8.     }

但是当我下一个方法也需要输入时,例如

  1.     public static String Shuru2()
  2.     {
  3.         Scanner sc = new Scanner(System.in);
  4.         System.out.println("请输入所需产品的保质期:");
  5.         String s = sc.next();
  6.         sc.close;
  7.         return s;
  8.     }

最后在main里调用它们时,只有Shuru()起作用了,运行到Shuru2()时会报错,上CSDN查才发现

 Scanner类的close()方法会关闭其绑定的输入流。一旦关闭 System.in 流时,后面的对象所用的 System.in 流就是关闭状态。需要注意的是,当调用close()方法时,如果流已经被关闭,再次调用close()方法将不会产生任何效果,也不会抛出异常。

 也就是说,整个文件中,close()只能用一次,用了之后就再也不能输入了。

所以我在main之外的方法不再用close(),就能正常输入了,问题是一堆警告。

 解决方法就是

在主方法中创建一个Scanner类对象,然后把这个Scanner类对象交给各个方法去调用,把Scanner类对象作为参数传递出去,在主方法中调用close()关闭。

其他所有类中不使用close()方法。

尽量全局使用一个scanner对象,在确定不再使用输入功能的时候只关闭一次scanner。
————————————————
版权声明:本文为CSDN博主「.长安忆.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_64423480/article/details/130444849

 大概像代码那样操作:

  1. public class ForSale {
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. String s = Shuru(sc);
  5. int day = Shuru2(sc)
  6. sc.close();
  7. }
  8. //输入产品生产日期
  9. public static String Shuru(Scanner sc)
  10.     {
  11.         System.out.println("请输入所需产品的生产日期(格式如2008-08-08):");
  12.         String s = sc.next();
  13.         return s;
  14.     }
  15. //输入产品保质期
  16.     public static String Shuru2(Scanner sc)
  17.     {
  18.         System.out.println("请输入所需产品的保质期:");
  19.         String s = sc.next();
  20.         return s;
  21.     }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/473873
推荐阅读
相关标签
  

闽ICP备14008679号