[英]Cannot execute .jsh file on JShell
我是编程和练习 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 但我还是无法执行。
我相信我肯定错过了一些东西,所以希望应该是一个快速修复,但由于计算经验有限,我已经尝试研究了很多小时,但似乎无法找出原因。
请让我知道对此的任何解决方案,我们将不胜感激任何帮助:)
请参阅System::console
的 JavaDoc!
它说:“返回与当前 Java 虚拟机关联的唯一控制台 object,如果有的话。” 再往下,对于返回值:“系统控制台,如果有的话,否则为 null。”
所以System::console
在 JShell 内部调用时返回null
。 似乎没有可用于执行 JShell 的 JVM 的控制台。 老实说,虽然我以前没有尝试过,但这不会让我感到惊讶。
JShell 本身在该控制台上运行,在这种情况下拥有第二个控制台没有多大意义。
相当于在 jshell 中使用/open Intro.jsh
的 jshell 命令行是:
jshell --startup Intro.jsh
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.