JShell执行.jsh文件报错及System.console()空指针问题求助
解决方案
一、修复--execution local Intro.jsh的语法错误
--execution local是JShell的启动参数,无法在JShell交互会话内部执行。正确用法是在终端直接运行:
jshell --execution local Intro.jsh
此命令会以本地执行模式直接加载并运行脚本,无需先进入JShell交互环境。
二、解决System.console()返回null的空指针异常
JShell交互环境中,System.console()的控制台实例获取逻辑存在限制(尤其是通过/open加载脚本时),推荐两种替代方案:
方案1:使用JShell内置readLine()方法
修改Intro.jsh脚本,替换System.console().readLine()为JShell适配的工具方法:
System.out.println("Hello! Please enter some text"); String x = readLine(); System.out.println("You wrote " + x);
修改后,无论是通过jshell Intro.jsh直接启动,还是在JShell内部用/open Intro.jsh加载,都能正常获取用户输入。
方案2:用原生终端直接启动JShell运行脚本
若必须保留System.console(),需确保JShell的输入输出直接绑定原生终端:
- 打开MacOS自带「终端」应用(避免使用IDE内嵌终端)
- 切换到脚本所在目录后执行:
jshell --execution local Intro.jsh
该模式下System.console()可正常获取控制台实例,不会返回null。
内容的提问来源于stack exchange,提问作者user18790606
相关产品推荐
相关产品推荐

