java - 设置特定 JShell 的输出流
问题描述
我有一个代码:
public class App {
public static void main(String[] args) {
System.out.println("Hello World from main!");
JShell shell = JShell.builder().build();
shell.eval("System.out.println(\"Hello World from JShell!\");");
}
}
现在我希望我可以只为 JShell 而不是普通代码设置输出流。
我试过了 :
shell.eval("System.setOut(new Printer());");
shell.eval("System.out.println(\"Hello World!\");");
但不起作用!
我的打印机类:
class Printer extends PrintStream{
public Printer() {
super(System.out);
}
@Override
public void print(String s) {
super.print("Message: - " + s);
}
}
解决方案
首先,您需要让 JShell 使用“本地” executionEngine
,以便您可以访问您的Printer
:
JShell shell = JShell.builder().executionEngine("local").build();
这基本上意味着“相同的JVM”。
其次,请记住导入Printer
类,或使用其完全限定名称,因为Printer
可能与运行 JShell 代码的包不在同一个包中(REPL
从我的实验中调用的包)。
看起来你的Printer
课程不是公开的,所以你也应该这样做public
。
推荐阅读
- hibernate - SpringBoot 与依赖项中使用的 Hibernate 冲突
- r - 如何在 R foreach 中修复“找不到对象'我'”?
- python - 读取带有嵌套字典的文本文件并转换为 csv
- google-cloud-platform - GPU配额增加但无法访问
- r - 有没有办法将一个列中的字符串与 R 中另一列中的几个字符串完全匹配?
- node.js - nodejs http服务器:出现错误时如何结束请求?
- php - php mysqli 连接到旧版本
- c# - 在 ASP.NET MVC 5 中调用 SOAP webservice 时如何修复 502 Bad Gateway 错误?
- asp.net - 我无法通过 Request.form aspx 获取发布参数
- javascript - 如何连接任意数量的数组并返回指定数量的数组副本