Java ProcessBuilder可以启动jar,但不支持acknolwledge jar';s的论点
我试图在运行的java程序中运行jmol的jar。这就是我在命令行中运行它的方式,它运行得很好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 -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就这样。我怎么能接受你的回答?