本帖最后由 using_name 于 2014-05-15 20:22:59 编辑

解决方案 »

  1.   

    sc.close()会把System.in也关掉,所以...
      

  2.   

    public void close()关闭此扫描器。 
    如果此扫描器尚未关闭,并且其底层 readable 也实现 Closeable 接口,则该 readable 的 close 方法将被调用。
    System.in是InputStream的对象,并且关掉之后不能再打开
      

  3.   

    那么怎样实现在不同的地方读取呢?用Scanner类
      

  4.   

    Java 是顺序执行的 你执行到.close() 后就代表 你关闭了 流,你再去调用已经被你关闭的流 显然是不现实的
    我的建议是 你做几个方法里面包含输入流,然后在main里面调用就可以了
      

  5.   

    如果非要用System.in,那么在没有全部读取完之前不要关闭Scanner
      

  6.   

    如果非要用System.in,那么在没有全部读取完之前不要关闭Scanner
    就是说第一个Scanner对象不要关闭,再申请第二个对象。
    看到youwarning 总觉得不爽啊
    安如果不用Scanner还有没有其他更好的方法,实现在多处读取控制台的输入,希望有代码哦
      

  7.   

    也可以用这个
    BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
    这个reader也不能关闭,不过它没有never closed警告
      

  8.   

    太麻烦了呀,不仅创建对象麻烦,而且还要加try…catch。
    难道就没有一个更简单的方法吗?
    我觉得应该有某个通用的方法处理这类问题吧!
      

  9.   

    主要问题是System.in不能重新打开,所以可以在程序结束时关闭
    final Scanner scanner=new Scanner(System.in);
    Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
    scanner.close();
    }
    });
      

  10.   

    我专门写了一个类
    class input
    {
    final static Scanner sc=new Scanner(System.in);
    }
    以后每次都调用input.sc,最后再把它关掉。这样就好了。
    非常感谢你,你的回答太专业了!
      

  11.   

    我是一个本科的菜鸟,还想多问一个关于输入的问题
    Console cons=System.console();
    创建的console对象为什么是null
    比如下面的代码执行不会成功
    Console cons;
    char[] passwd;
    if ((cons = System.console()) != null &&
    (passwd = cons.readPassword("[%s]", "Password:"))!= null) {
         ...
    java.util.Arrays.fill(passwd, ' ');
     }
      

  12.   

    你用的是Eclipse吧?Eclipse运行java程序用的是javaw,不关联控制台,所以System.console()是null
    如果通过cmd运行java命令就好了
      

  13.   

    虽说这种问题很低级,但是如果没扔告诉的话,自己一时也想不到。
    我学java时间很短,很多问题都不清除,谢谢指教,非常感谢你。