如何使用jshell运行java应用程序?它应该能够像 bash 那样指定类路径并调用 java 命令并传递一些参数,例如,
#!/bin/bash
$ARGS=...
$CLASSPATH=...
java -cp $CLASSPATH $ARGS com.example.MyApp
Run Code Online (Sandbox Code Playgroud)
更新:
我认为需要运行时或进程的包装,例如,
jshell> private String executeCommand(String command) {
...>
...> StringBuffer output = new StringBuffer();
...>
...> Process p;
...> try {
...> p = Runtime.getRuntime().exec(command);
...> p.waitFor();
...> BufferedReader reader =
...> new BufferedReader(new InputStreamReader(p.getInputStream()));
...>
...> String line = "";
...> while ((line = reader.readLine())!= null) {
...> output.append(line + "\n");
...> }
...>
...> } catch (Exception e) {
...> e.printStackTrace();
...> }
...> …Run Code Online (Sandbox Code Playgroud) JShell 是一个 Java REPL,计划与 Java 9 一起发布;但是,它有一个公开测试版。
如果我通过键入以下内容在 JShell (Project Kulla) 中创建一个无限循环:
-> while(true) {}
Run Code Online (Sandbox Code Playgroud)
JShell 将永远循环。除了完全退出 JShell,有没有办法在 JShell 中运行时停止单个代码行(在您已经开始评估代码之后)?
嗨,我在Windows 10操作系统上使用JDK11,而我正在使用的Jshell版本是11.0.1。
我正在尝试执行各种Jshell命令,并被卡在以下命令的执行中
我有一个示例程序,该示例程序使用多个JAR文件Employee.jar和spring-context-5.1.3.jar文件中的类。
登录到Jshell之后,我正在使用以下命令在Jshell中设置类路径,但它会引发错误
jshell> /env -class-path D:\JshellClassPath\Employee.jar:D:\JshellClassPath\spring-context-5.1.3.jar
| File 'D:\JshellClassPath\Employee.jar:D:\JshellClassPath\spring-context-5.1.3.jar' for '--class-path' is not found.
Run Code Online (Sandbox Code Playgroud)
如果我仅设置一个Jar文件并执行上述命令,则可以正常工作,但是为什么我不能设置多个Jar文件/ env命令?
我观察到,在JShell会议,不仅包“的java.lang”,但不少其他的包(即未在Java类文件自动导入,例如LinkedList,Math与其他几种)似乎是进口的,由默认。
我想知道,默认情况下,在 JShell 会话中还有哪些其他包可用,以及是什么促使这种区别于普通类文件的?
我在JEP 222上找不到任何东西,无论是这种自动/隐式导入的动机,还是实际导入的文档。
我一直在使用JShell来测试它,今天我遇到了相当有趣的行为.
jshell> String a = "A"
a ==> "A"
jshell> String b = "A"
b ==> "A"
jshell> a == b
$4 ==> true
jshell> "A" == "A"
$5 ==> true
Run Code Online (Sandbox Code Playgroud)
我首先想知道这是否是Java 9的一个功能,我通过使用Java 9编译和运行该程序来检查它
public class Equus {
public static void main(String... args) {
String a = "A";
String b = "A";
System.out.println("a == b");
System.out.println(a == b);
System.out.println("\"A\" == \"A\"");
System.out.println("A" == "A");
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,我得到了
Run Code Online (Sandbox Code Playgroud)a == b true "A" == "A" true
作为我的输出也是如此.这里发生了什么?为什么a和b彼此相等,为什么是 …
这不是真正的错误,但是当我检查运行时版本时,它提供了以下内容,这是否表示我做错了什么?
jshell> Runtime.version()
$3 ==> 12.0.1+12
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Debian 10 buster 上启动 jshell。我从 Oracle 下载了 jdk-16_linux-x64_bin.tar.gz 并将其解压到我的主目录中的“jdk-16”中。我已经设置了 PATH 和 JAVA_HOME:
~$ export PATH=~/jdk-16/bin:$PATH
~$ export JAVA_HOME=~/jdk-16
~$ javac --version
javac 16
~$ java --version
java 16 2021-03-16
Java(TM) SE Runtime Environment (build 16+36-2231)
Java HotSpot(TM) 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
测试“Hello world”程序在此环境下能否成功编译并运行。但是,当我尝试运行 jshell 时,出现以下错误:
~$ jshell
| Welcome to JShell -- Version 16
| For an introduction type: /help intro
Exception in thread "main" java.io.IOError: java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at jdk.internal.le/jdk.internal.org.jline.utils.Curses.tputs(Curses.java:62) …Run Code Online (Sandbox Code Playgroud)