Tag: jshell

抛出exception后,jshell继续执行我的脚本。 如何让它停止?

我尝试编写一些jshell脚本。 抛出exception时,jshell仍继续执行下一行。 如何让我的脚本更像普通的java程序? 编辑 :我只是像jshell SCR.jsh一样运行它。 使用throw new Exception()或1/0不会阻止执行下一行。 该脚本包括如下语句: System.out.println(1/0) System.out.println(“foo”) /exit 我以为第二行无法访问。 这就是我的预期。 但是在打印exception后,还会打印foo 。

如何在JShell中提供javadoc文档?

我正在使用JShell来测试一个库,我通过类路径为它创建了类,源和javadoc,如下所示: jshell –class-path library-javadoc.jar:library-sources.jar:library-jar-with-dependencies.jar 仍然,当我收到一个记录的Java标识符之后的双选项卡时: JShell如何期待文档?

在JShell上执行时同一语句的不同行为

我正在研究一个问题,以便在彼此之间存储两个类的引用 例如: class A { B b; A(B b){ this.b = b;} } class B { A a; B(A a){ this.a = a;} } public static void main(String…s){ A a = new A(new B(null)); aba = a; } 现在,如果我使用以下语句而不是上面的初始化: A a = new A(new B(a)); 我得到了以下错误,这很明显: Main.java:19: error: variable a might not have been initialised […]

是否有另一种方法来启动远程jvm?

我正在玩JDK9的JShell API。 目前,JShell API在内部自动启动远程JVM。 我不想自动启动流程,而是将两个流程分开。 注意:我知道我可以更改VM选项。 但我想知道VM是否可以在不同的机器上运行。 默认执行控件最终在代码中到达此位置 。 如果我指定启动,它会自动使用com.sun.jdi.CommandLineLaunch连接器,它实际上是按定义启动java程序。 如果我指定no-launch,它会像我期望的那样使用com.sun.jdi.SocketListen ,一旦启动服务器套接字,它就会自动启动一个远程虚拟机并连接到这个套接字 。 我认为这是出乎意料的。 我试过的其他事情, Shell jshell = JShell.builder() .executionEngine(“jdi:hostname(localhost),launch(false)”) .build(); jshell.eval(“1+2”); 我希望这会失败或被卡住,直到一个单独的进程开始。 是否有另一种方法来指定连接器,或者不启动JVM? (我对’本地’也不感兴趣) 一些简单的选项,例如能够将com.sun.jdi.RawCommandLineLaunch指定为接受自定义命令的连接器,或者能够使用套接字侦听连接器并等待其他进程连接。 谢谢。

有没有办法在jshell中为顶级函数使用方法引用?

假设我在jshell中这样做: jshell> void printIsEven(int i) { …> System.out.println(i % 2 == 0); …> } | created method printIsEven(int) jshell> List l = Arrays.asList(7,5,4,8,5,9); l ==> [7, 5, 4, 8, 5, 9] jshell> l.forEach(/* ??? */); // is it possible to use a method reference here? 在普通程序中,我可以在非静态上下文中编写l.forEach(this::printIsEven) ,或者在名为MyClass的类的静态上下文中l.forEach(MyClass::printIsEven) 。 在jshell中使用this::printIsEven不起作用,因为jshell在静态上下文中执行语句,但是你不能使用静态方法引用,因为没有类名称为前缀::printIsEven ,并且尝试l.forEach(::printIsEven)只是一个语法错误。

在jshell中使用C选项有什么用处

我已经阅读了jshell指南的介绍,但在jshell中找不到关于-C选项的描述/示例。 $jshell –help -C Pass to the compiler. Use one -C for each compiler flag or flag argument

如何在脚本结束时关闭jshell?

如何指示jshell在脚本结束时终止,类似于其他语言的解释器,例如python3或node ? 遵循命令 ./jshell -q /tmp/shell.java 使用脚本/tmp/shell.java System.out.println(“Hello world”); 版画 Hello world jshell> 并等待进一步的命令。 我希望它立即停止在文件的末尾。 我正在寻找比System.exit(0);更优雅的东西System.exit(0); 在脚本的最后。

如何在JShell中运行作为片段添加的整个Java文件?

我尝试安装JDK 9 Early access version 172来玩JShell。 当我尝试打开一个简单的java文件并在将其添加为片段后执行它时,它只显示了修改后的类Test并增加了片段编号。 你能帮我理解我哪里出错了吗? | Welcome to JShell — Version 9-ea | For an introduction type: /help intro jshell> /open G:\kavitha\Test.java jshell> /list 1 : public class Test{ public static void main(String[] args){ int i = 1; int j = 2; System.out.println(“Sum of 1 and 2 is : ” + (i+j)); […]

JShell不会使用Git Bash执行任何操作

我为Windows安装了Java9( Oracle网站上当前可用的版本)(Windows 10 x64 Professional,也是最新的,作为vmware虚拟机运行 – > VMware Workstation 12)。 我将jdk\bin添加到User’s Path并尝试使用Git Bash来执行命令,但即使JShell启动,它也不会在按Enter后执行任何命令,它只是坐在那里而不做任何事情。 有趣的是它与Windows的默认命令行CMD或Powershell完美配合。 如果我没记错,Git Bash是基于Cygwin的。 这可能是什么原因? 此外,它没有直接连接到JShell ,但我在一台不同的机器上遇到了类似的问题,有一些命令行工具,比如JHipster (适用于CMD但不适用于GitBash)。 必要的截图: – 编辑:使用jshell -v没有什么区别。 此外,使用任何REPL帮助程序命令,如/help或/help intro会使shell停止。

如何在intellij JShell控制台中导入自定义类

我正在使用新的intellij Jshell控制台(在此处介绍https://blog.jetbrains.com/idea/2017/09/java-9-and-intellij-idea/ ) 我创建了一个简单的类文件Test2.java public class Test2 { public static String test(){ return “Hello”; } } JShell控制台能够在提示中找到方法 当我尝试在intellij jshell控制台上运行它时(工具> Jshell控制台) Test2.test(); 我收到以下错误 “C:\Program Files\Java\jdk-9.0.1\bin\java” –add-modules java.xml.bind -classpath “C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.1\lib\jshell-frontend.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.1\lib\jshell-protocol.jar” com.intellij.execution.jshell.frontend.Main ERROR: cannot find symbol symbol: variable Test2 location: class Rejected Test2.test() 有什么东西我必须配置JShell来识别我的自定义类? 我已将其设置为使用项目的类路径。 代码。 Jshell控制台和下面的错误。 编辑: […]