2012-04-02 38 views
1

林試圖發起一個jar文件作爲一個過程,我需要運行的命令是這樣的:參數語法

「的java -Xmx512M -Xms512m罐子myapp.jar ARGS」

這是代碼我現在有工作:

ProcessBuilder builder = new ProcessBuilder(); 
String[] command = {"java", "-jar", "myapp.jar"}; 
builder.command(command); 
Process process = builder.start(); 

OutputStream stdin = process.getOutputStream(); 
InputStream stdout = process.getInputStream(); 

BufferedReader reader = new BufferedReader(new InputStreamReader(stdout)); 
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin)); 

ReaderThread rt = new ReaderThread(reader); 
Thread handle = new Thread(rt, "ReaderThread"); 
handle.start(); 

但是,如果我嘗試添加一些像「-Xmx1024M」如果我嘗試添加我會得到一個「Maximun堆錯誤」或「args」在最後一個字符串,然後我得到「無法訪問jarfile」。

那麼什麼是正確的語法來添加所有的參數,以正確的順序完成系統調用?

非常感謝您的幫助。

編輯:

我也試過路過整個命令,但由於某種原因,沒有工作。

回答

1

您似乎沒有處理進程的錯誤輸入流。

請看看這裏:What to do when Runtime exec Won't這將解釋問題並給你一個解決方案:使用流戈布勒。

+0

我稍後處理流,但我不能讓它執行我想要的完整命令。 thx – josephfley 2012-04-02 18:10:34

+0

@joseph:請說明你如何處理這些流。 – 2012-04-02 18:12:13

+0

我修改了原來的帖子以包含該部分,我可以發佈完整的代碼,但基本上一個線程讀取輸出,該部分工作,我只是不能將參數傳遞給子進程jar。 – josephfley 2012-04-02 18:19:52

0

您可能需要爲進程設置工作(aka current)目錄,以便它可以找到jar文件。或者用-classpath指定classpath,以便包含該jar。

另外,請狼吞虎嚥輸出