JShell脚本获取用户输入失败的原因及解决方法
解决JShell脚本执行时无法获取用户输入的问题
我明白你遇到的困扰了——逐行在JShell交互式环境里输入代码能正常运行,但用jshell hello.java执行脚本文件就抛出NoSuchElementException,这是因为JShell的批量执行模式和交互式模式对标准输入的处理逻辑存在差异。
问题根源
当你直接用jshell hello.java运行脚本时,JShell处于批量执行模式,它默认不会将终端的标准输入(System.in)关联到脚本中的Scanner实例,导致Scanner尝试读取输入时找不到可读取的元素,从而抛出NoSuchElementException。而逐行输入代码时,你处于JShell的交互式会话中,此时System.in已经和终端输入绑定,所以Scanner能正常工作。
快速解决方法
最简便的解决方案是使用-i参数强制JShell以交互式模式运行脚本,这样就能让Scanner正常读取终端输入了:
jshell -i hello.java
运行这个命令后,你就能看到脚本里的提示信息,正常输入数字并得到计算结果。
额外容错优化
如果你想让脚本更健壮,也可以添加异常处理逻辑,避免输入无效内容导致脚本崩溃,比如:
Scanner in = new Scanner(System.in); try { System.out.print("Enter number n1: "); int n1 = in.nextInt(); System.out.print("Enter number n2: "); int n2 = in.nextInt(); System.out.println("n1 + n2 = " + (n1 +n2)); } catch (NoSuchElementException e) { System.out.println("输入无效,请输入整数!"); } finally { in.close(); } /exit
不过核心还是要确保JShell运行脚本时处于交互式模式,才能让用户输入正常传递给Scanner。
内容的提问来源于stack exchange,提问作者my-
相关产品推荐
相关产品推荐

