2013-11-21 212 views
0

我一直在swing應用程序中工作。我有一個JFrame有一些按鈕和字段。從java代碼運行exe

在某些按鈕上單擊事件,我從當前目錄打開一個exe文件。一切正常。

try { 
     Runtime.getRuntime().exec(System.getProperty("user.dir") + 
     "\\Upgrade\\Upgrade.exe"); 
     } catch (IOException ex) { 
     ex.printStacktrace(); 
     } 
    this.dispose(); // disposing my current java file. 

,但我需要的是退出打開exe文件後的Java代碼。

任何人都可以幫助解決這個問題。

+1

你不能。如果父進程關閉,子進程也將關閉。 – Kayaman

+2

你可以不只是做System.exit(0); – david99world

+0

這個怎麼樣? http://stackoverflow.com/questions/287633/java-c-like-fork – Carlo

回答

0

你可以嘗試使其成爲一個過程,然後等待該進程退出之前完成,像這樣:

class SO { 
public static void main(String args[]) { 
try { 
    Process proc = Runtime.getRuntime().exec("your command"); 
    proc.waitFor(); //Wait for it to finish 
    System.exit(0); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
} 
} 
+0

謝謝..它作品..! – SanCJ

+0

@SanCJ很高興它的工作原理,如果你有機會,我可以請一個綠色的勾號來表明問題的答案爲D = D – Levenal

0

執行從Java中使用的Runtime.exec()的應用是衆所周知的問題的根源。就像等待進程完成一樣,但不要使用流緩衝區中的數據,這對於您的應用程序來說是一個肯定的方式。

我建議你使用像Apache Common Exec這樣的庫來處理這個問題。

我在一個項目中工作了一段時間,我們使用Runtime.exec()來啓動一個最終將通過現有文件提取文件的進程。除了用於分級的一臺機器之外,所有這些都運行良好 - 它只會掛起。原來在這臺登臺機器上,有人設置了日期/時間,所以它看起來很喜歡在比現有的更早的地方提取新文件,導致外部進程爲每個文件生成一條警告消息,使錯誤緩衝區溢出 - 我們的應用程序沒有消耗!