java 无法在JShell上执行.jsh文件

vpfxa7rd  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(217)

我是一个编程和练习Java的初学者(使用MacOS和jdk.17),但有人指导我使用JShell来处理较小的Java代码片段。我安装了JShell,打开了一个文本编辑器,创建并编译了一个名为Intro.jsh的文件,代码如下:

System.out.println("Hello! Please enter some text");
String x = System.console().readLine();
System.out.println("You wrote " + x);

然后我打开终端设置我的工作目录,以确保文件保存在与目录相同的环境中。我打开JShell并使用以下命令:

jshell> --execution local Intro.jsh

我收到错误消息,例如:

Error:
';' expected
--execution local Intro.jsh
        ^ 
Error:
not a statement
--execution local Intro.jsh

但是,当我使用命令/open Intro.jsh时,它显示:

"Hello! Please enter some text.
 Exception java.lang.NullPointerException: Cannot invoke "java.io.Console.readLine()" because the return value of "java.lang.System.console()" is null at (#2:1)
You wrotenull"

第一行可以工作,但是第二行需要用户输入。虽然我可以打开文件,但我很难解决为什么在打开JShell之前反复检查我的wd却无法执行。
我相信有一些我肯定错过了,所以希望应该是一个快速修复,但由于有限的计算经验,我已经尝试了许多小时的研究,但似乎无法找到原因。
请让我知道任何解决方案,任何帮助将不胜感激:)

0lvr5msh

0lvr5msh1#

请参阅System::console的JavaDoc!
它表示:“返回与当前Java虚拟机关联的唯一Console对象,* 如果有 *。”再往下,返回值为:系统控制台(如果有),否则为null。
所以System::console在JShell内部调用时返回null。似乎执行JShell的JVM没有可用的控制台。老实说,这不会让我太惊讶,尽管我以前没有尝试过。
JShell本身运行在该控制台上,在这种情况下,拥有第二个控制台没有多大意义。

wljmcqd8

wljmcqd82#

与在jshell中使用/open Intro.jsh等效的jshell命令行为:

jshell --startup Intro.jsh

相关问题