[J2SE] 如何開啟並間控外部process

看板java作者 ( .)時間13年前 (2013/02/07 21:15), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/2 (看更多)
我手上有一支以C++使用mingw編成的command line模擬程式,他吃一個XML的input file。 現在我用java撰寫一隻前處理程式,作用是會把使用者的input存成xml檔案,並且 在使用者按下上面的"開始計算"的按鈕之後自動叫出該command line程式並開始計算。 此外,還要能盯住該command line視窗,如果使用者按下"停止計算"的按鈕, 則會把相對應的command line視窗殺掉。 我目前試過使用ProcessBuilder或是Runtime.getRuntime的方式來做。 我另外開一個thread,在裏面呼叫ProcessBuilder或是Runtime.getRuntime下如下指令: cmd.exe /c start <模擬程式> <input file路徑> 這樣會開始算,而且一直算下去。不過,我java裏的thread會立刻結束,看起來很像是我 java thread裏面的process物件得到了exitValue然後就結束了。但是外面的 command line視窗仍在,而且模擬程式繼續計算中。如果把指令改成下面這樣: cmd.exe /c start /wait <模擬程式> <input file路徑> 這樣會變成我去創造process的thread不會立刻結束而是到我裏面用的process.waitFor() 結束時thread才會跟著結束。如此行為原本符合我的預期直到我發現當我去interrupt 這個thread(我有覆寫interrupt(),會先call Process.destroy()才做interrupt)時, 這個thread有結束掉但是我叫出來的process則沒有,外面的command line是視窗仍存在。 看起來不論我用什麼方法,一但我啟動該command line process之後就對他失去 追蹤了。請問我要用什麼方法才能在XP上達到我上面所說的目的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.186.80 ※ 編輯: ICBM 來自: 123.205.186.80 (02/07 22:03)

02/08 17:04, , 1F
taskkill /?
02/08 17:04, 1F

02/08 22:50, , 2F
比較簡單的方法是產生一個暫時的.bat放你想做的事。
02/08 22:50, 2F
文章代碼(AID): #1H4waETr (java)
文章代碼(AID): #1H4waETr (java)