2013-07-31 151 views
4

本質上,我正在製作一個小程序,它將安裝一些軟件,然後運行一些基本命令以準備該程序。但是,發生的情況是程序開始安裝,然後立即轉到以下行(註冊,更新等)。當然,這隻有在完全安裝之後才能發生,所以我希望在運行第一個進程之前找到一種等待第一個進程的方法。例如,等待過程完成,然後再繼續使用Java

Main.say("Installing..."); 
    Process p1 = Runtime.getRuntime().exec(dir + "setup.exe /SILENT"); 
    //Wait here, I need to finish installing first! 
    Main.say("Registering..."); 
    Process p2 = Runtime.getRuntime().exec(installDir + "program.exe /register aaaa-bbbb-cccc"); 
    Main.say("Updating..."); 
    Process p4 = Runtime.getRuntime().exec(installDir + "program.exe /update -silent"); 

回答

14

致電Process#waitFor()。它的Javadoc說:

導致當前線程等待,如果有必要,直到由此Process對象表示的進程終止。

獎勵:您將獲得子流程的退出值。因此,您可以檢查代碼0是否成功退出,或者是否發生錯誤(非零退出代碼)。

+2

對於安裝程序來說,一些天真的設計可能無效地返回0退出代碼以發生錯誤。我前段時間實際上遇到了一個問題,調試很痛苦。 – hexafraction

+3

Ahw ...那簡直是傷心:( – mthmulders

+0

是的,這是一個很有價值的警告,我指的是安裝程序的設計令人傷心 – mthmulders

4

可以使用Process.waitFor()方法

和醫生說

造成當前線程到等待,如果必要的話,直到通過此處理對象表示的進程 已終止。如果子進程已經終止,則此方法立即返回 。如果 子流程尚未終止,則調用線程將被阻止 ,直到子流程退出。

0

包括waitFor()。在你的情況下,你的代碼將如下所示。

Main.say("Installing..."); 
    Process p1 = Runtime.getRuntime().exec(dir + "setup.exe /SILENT"); 
    p1.waitFor() 
    Main.say("Registering..."); 
    Process p2 = Runtime.getRuntime().exec(installDir + "program.exe /register aaaa-bbbb-cccc"); 
    Main.say("Updating..."); 
    Process p4 = Runtime.getRuntime().exec(installDir + "program.exe /update -silent"); 
相關問題