You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:49:24