我是一个编程和练习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却无法执行。
我相信有一些我肯定错过了,所以希望应该是一个快速修复,但由于有限的计算经验,我已经尝试了许多小时的研究,但似乎无法找到原因。
请让我知道任何解决方案,任何帮助将不胜感激:)
2条答案
按热度按时间0lvr5msh1#
请参阅
System::console
的JavaDoc!它表示:“返回与当前Java虚拟机关联的唯一Console对象,* 如果有 *。”再往下,返回值为:系统控制台(如果有),否则为null。
所以
System::console
在JShell内部调用时返回null
。似乎执行JShell的JVM没有可用的控制台。老实说,这不会让我太惊讶,尽管我以前没有尝试过。JShell本身运行在该控制台上,在这种情况下,拥有第二个控制台没有多大意义。
wljmcqd82#
与在jshell中使用
/open Intro.jsh
等效的jshell命令行为: