2013-03-02 28 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"};