【问题标题】:How to execute another java program via shell command from java program如何通过java程序的shell命令执行另一个java程序
【发布时间】:2014-04-10 05:28:49
【问题描述】:

我应该为我的项目制作一个 IDE。在这里,我必须通过特定 java 程序的 Shell 命令执行 java 程序(假设 Hello world )。我知道如何通过 java 程序执行 shell 命令(使用 Runtime.getRuntime()),但是如何使用这个 shell 命令调用运行 java 程序。

【问题讨论】:

  • 第一,使用ProcessBuilder,第二,你平时会怎么做呢?可能是java ... 之类的东西?
  • @MadProgrammer 是的,我使用的命令是:1. 使用cd 导航到正确的文件夹,然后 2. 调用java -jar filename.jar

标签: java shell


【解决方案1】:

ProcessBuilder 开头,它将允许您将每个命令参数分隔为单独的参数,无需“引用”具有空格(如路径)的参数,它将允许您指定起始位置命令(工作目录)和重定向支持使得从命令的输出中提取信息变得更加容易(尽管您可能希望将其分开)...

 List<String> cmds = new ArrayList<String>(5); // You can use arrays as well
 cmds.add("java");
 cmds.add("-jar");
 cmds.add("filename.jar");
 ProcessBuilder pb = new ProcessBuilder(cmds);
 pb.redirectErrorStream(true);
 pb.directory(new File("...")); // Working directory...
 Process p = pb.start();
 // Normal processing of the Process...

你甚至可以指定传递给进程的环境变量...

查看Java Docs了解更多详情

【讨论】:

  • 我没有jar文件,而是.java文件。
  • @user3518031 那为什么会有所作为呢?所做的只是更改命令行...
【解决方案2】:

这会奏效。
设置命令,然后创建运行时并在那里执行命令。

String command[] = new String[4];
command[0] = "cmd";
command[1] = "/k start cmd /k";
command[2] = "java";
command[3] = path;

Process p = Runtime.getRuntime().exec(command);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));  //This will allow you to supply with input
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));  //This will provide you access to the errors.
pw = new PrintWriter(p.getOutputStream());      
pw.println("next commands");

PrintWriter 对象将允许您执行更多命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多