【问题标题】:ProcessBuilder works starting jar but does not acknolwledge jar's argumentsProcessBuilder 可以启动 jar 但不承认 jar 的参数
【发布时间】:2013-03-02 20:12:35
【问题描述】:

我正在尝试在正在运行的 java 程序中运行 jmol 的 jar。这就是我在命令行中运行它的方式,它运行良好。

$ java -jar Jmol.jar 1644_____.pdb -o -J "measure 3 4;measure 1 2"

我正在使用 ProcessBuilder,它正确调用了 jar 文件和第一个参数,但没有正确调用其余参数。我错过了什么?

import java.io.IOException;

class test{
    public static void main(String [] ar) throws Exception{
        run();
    }

    public static void run() throws IOException, InterruptedException{
        String INPUTPDB = "1644_____.pdb";
        String args[] = {"java", "-jar", "Jmol.jar", INPUTPDB, "-o", "-J", "\"measure 3 4;measure1 2\""};
        ProcessBuilder pb = new ProcessBuilder(args);
        //Runtime.getRuntime().exec(args);
        Process p = pb.start();
        p.waitFor();
    }
}

【问题讨论】:

  • [不知道这个问题,可能是参数排序,可能是 exec(new String[] {"...."})](stackoverflow.com/a/6164084/714968)
  • 您似乎没有处理 InputStream、OutputStream 和错误 InputStream。尤其是错误流可能会向您显示重要的错误消息。此外,如果您不处理这些流,您可能会填满操作系统缓冲区,导致您的进程无法运行。
  • 我会更新代码来处理这个
  • 我可能是错的,但我很确定您不需要“引用”参数组,例如 ` "\"measure 3 4;measure1 2\"", "measure 3 4;measure1 2"` 应该没问题
  • @MadProgrammer 就是这样。我怎样才能接受你的回答?

标签: java processbuilder


【解决方案1】:

据我了解,您传递给ProcessBuilder 的每个参数都将作为单独的参数传递给进程。

这意味着当进程执行args[x] 的等效操作时,您的\"measure 3 4;measure1 2\" 参数在进程看来将类似于"measure 3 4;measure1 2"(包括引号)。

除非命令需要引号,否则不需要引用参数

相反,尝试类似

String args[] = {"java", "-jar", "Jmol.jar", INPUTPDB, "-o", "-J", "measure 3 4;measure1 2"};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2010-12-13
    相关资源
    最近更新 更多