2

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

1 回答 1

5

据我了解,您传递给的每个参数都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"};
于 2013-03-02T20:53:12.580 回答