Java ProcessBuilder可以启动jar,但不支持acknolwledge jar';s的论点

Java ProcessBuilder可以启动jar,但不支持acknolwledge jar';s的论点,java,processbuilder,Java,Processbuilder,我试图在运行的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 []

我试图在运行的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();
    }
}

据我所知,传递给
ProcessBuilder
的每个参数都将作为单独的参数传递给流程

这意味着,当流程执行与
args[x]
等效的操作时,您的
\“measure3 4;measure1 2\”
参数将类似于流程的
“measure3 4;measure1 2”
(包括引号)

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

相反,尝试类似的方法

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

[从这个问题上不知道,可能是参数的顺序,可能是exec(新字符串[]{…“})]()您似乎没有处理InputStream、OutputStream和error InputStream。特别是错误流可能会向您显示重要的错误消息。此外,如果您不处理这些流,您可能会填充操作系统缓冲区,从而导致进程无法正常运行。我将更新代码以处理此问题。我可能会错,但我非常确定您不需要“引用”参数组,如““\”度量值3 4;度量值12 \“
“度量值34;度量值12”`应该是fine@MadProgrammer就这样。我怎么能接受你的回答?