2013-03-02 40 views
1

我想在运行java程序中运行jmol的jar。这是我在命令行中运行它的方式,它运行良好。ProcessBuilder工作启动jar但不acknolwledge 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(); 
    } 
} 
+0

[不知道这个问题,也许订购的参数,也许EXEC( new String [] {“....”})](http://stackoverflow.com/a/6164084/714968) – mKorbel 2013-03-02 20:15:21

+1

你似乎没有处理InputStream,OutputStream和错误InputStream。错误流尤其可能会向您显示重要的错误消息。另外,如果您不处理这些流,则可能会填充操作系统缓冲区,导致流程无法正常工作。 – 2013-03-02 20:15:33

+0

我会更新代码来处理这个 – 2013-03-02 20:18:25

回答

4

据我所知,每个传递给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"};