2013-07-17 224 views
0

我正在嘗試爲我的應用程序構建一個簡單的自動更新程序。我目前正在根據遠程版本檢查本地應用程序版本。如果有更新的版本,我想啓動我的updater.jar - 基本上下載並替換舊的應用程序。從Java應用程序內運行jar

我的問題是,我似乎無法得到updater.jar開始,如果有一個新版本。

我目前使用的代碼是:

Runtime runtime = Runtime.getRuntime(); 
try { 
    Process proc = runtime.exec("java -jar updater.jar"); 
} catch (IOException ex) { 
    Logger.getLogger(Splash.class.getName()).log(Level.SEVERE, null, ex); 
} 
System.exit(0); 

退出應用程序,但updater.jar從未推出..

任何想法?

+0

是異常的catch塊輸入(即是有記錄日誌信息)? – hmjd

回答

0

當您的父進程退出時,您的子進程可能會退出。

當你啓動一個過程,你平時應該:

  1. 消耗標準輸出/標準錯誤與子進程。如果你不要這樣做你的子進程可以阻止等待它的輸出被消耗。你應該在單獨的線程中使用。見this answer更多細節
  2. 使用Process.waitFor()從子進程

在我看來捕捉退出代碼就像你要釀出更新,讓它進行下載,然後退出你的父進程。任何更復雜的將可能是依賴於平臺(例如產卵一個後臺進程和disowning它)

+0

是啊,即時通訊類型的卡住如何將代碼啓動updater.jar看起來像?嘗試了一堆不同的東西不能得到任何工作 – Alosyius

+0

AFAICT,你不能讓孩子在父母死在Java後生活。自動更新Java軟件可能是主要的PITA(甚至像IntelliJ IDEA(http://jetbrains.com/idea)這樣的大型軟件產品)(如果還沒有的話) - 在成功更新後很難重新啓動;無論如何,我打賭他們爲這些目的提出了一些特定平臺)。 – incarnate

0

也許路徑updater.jar應在java -jar命令來指定。

相關問題