Java 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

 大概像代码那样操作:

public class ForSale {
    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in);
        String s = Shuru(sc);
        int day = Shuru2(sc)
        sc.close();
    }

//输入产品生产日期
    public static String Shuru(Scanner sc)

    {
        System.out.println("请输入所需产品的生产日期(格式如2008-08-08):");
        String s = sc.next();
        return s;
    }
//输入产品保质期
    public static String Shuru2(Scanner sc)

    {
        System.out.println("请输入所需产品的保质期:");
        String s = sc.next();
        return s;
    }

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

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

    public static String Shuru()

    {

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入所需产品的生产日期(格式如2008-08-08):");

        String s = sc.next();
        sc.close;

        return s;

    }

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

    public static String Shuru2()

    {

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入所需产品的保质期:");

        String s = sc.next();
        sc.close;

        return s;

    }

最后在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

 大概像代码那样操作:

public class ForSale {
    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in);
        String s = Shuru(sc);
        int day = Shuru2(sc)
        sc.close();
    }

//输入产品生产日期
    public static String Shuru(Scanner sc)

    {
        System.out.println("请输入所需产品的生产日期(格式如2008-08-08):");
        String s = sc.next();
        return s;
    }
//输入产品保质期
    public static String Shuru2(Scanner sc)

    {
        System.out.println("请输入所需产品的保质期:");
        String s = sc.next();
        return s;
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值