Leo*_*eon 4 java java-9 jshell
如何使用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();
...> }
...>
...> return output.toString();
...>
...> }
| Created method executeCommand(String)
jshell> String out =executeCommand("java --version");
out ==> "java 9.0.4\nJava(TM) SE Runtime Environment (bui ... d 9.0.4+11, mixed mode)\n"
jshell> System.out.println(out);
java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
Run Code Online (Sandbox Code Playgroud)
您的代码已损坏,因为您首先等待命令\xe2\x80\x99s 完成,然后才读取管道。如果命令产生的输出多于管道可以缓冲的输出,则该命令将被阻塞并且永远不会完成,因为此时没有人正在读取管道。
\n\n在完美的世界中,您只需使用
\n\nnew ProcessBuilder(your command and args).inheritIO().start().waitFor()\nRun Code Online (Sandbox Code Playgroud)\n\n就像在普通的 Java 应用程序中一样。不幸的是,jshell以一种不起作用的方式更改标准文件描述符(至少在我测试的 Windows 版本中)。
您可以使用
\n\nvoid run(String... arg) throws IOException, InterruptedException {\n Path tmp = Files.createTempFile("run", ".tmp");\n try {\n new ProcessBuilder(arg).redirectErrorStream(true).redirectOutput(tmp.toFile())\n .start().waitFor();\n Files.lines(tmp, java.nio.charset.Charset.defaultCharset())\n .forEach(System.out::println);\n }\n finally { Files.delete(tmp); }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n并称之为,例如
\n\nrun("java", "-version")\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\nrun("java", "-d", "java.base")\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |