zoukankan      html  css  js  c++  java
  • 1-解决java Scanner出现 java.util.NoSuchElementException

    起因:在函数中新建scanner对象,然后多次调用此方法出现上述异常

    原因:Scanner(system.in)在Scanner中接受的是键盘 输入,当调用close()方法时

    Scanner的关闭会导致System.in的关闭,System.in是标准输入(键盘输入),只能关一次,关闭后不能再打开。

    解决办法1:在主函数的声明,然后作为参数传入方法中

    解决办法2:

      查看scanner源码

    // Boolean indicating if this scanner has been closed
        private boolean closed = false;
    
    public void close() {
            if (closed)
                return;
            if (source instanceof Closeable) {
                try {
                    ((Closeable)source).close();//将会关闭流
                } catch (IOException ioe) {
                    lastException = ioe;
                }
            }
            sourceClosed = true;
            source = null;
            closed = true;
        }

       直接在函数中用反射改变closed的值,实现永远不关闭

     public void scanner() throws NoSuchFieldException, IllegalAccessException, InstantiationException {
            Scanner my=new Scanner(System.in);
    
            a=my.nextInt();
            b=my.nextInt();
            c=my.nextInt();
            Class clazz  =Scanner.class;
            Field field = clazz.getDeclaredField("closed");
            field.setAccessible(true);
            field.set(my,true);
            my.close();
        }

      当想要关闭的时候,再使用反射改变为false,调用scanner.close();

  • 相关阅读:
    mysql修改时区time_zone
    magento的布局(layouts)、模块(block)、模板(templates)
    唯品会消息网关的架构定位
    Java应用一般架构
    maven打包命令
    端口查看与封杀
    java程序优化
    高并发下竞争的资源
    java中的多线程高并发与负载均衡的用途
    Web负载均衡的几种实现方式
  • 原文地址:https://www.cnblogs.com/simon-idea/p/9819801.html
Copyright © 2011-2022 走看看