2010-08-23 96 views
0

我有一個簡單的服務器應用程序,我想在後臺運行。下面一行對我的作品:運行java問題的Java Runtime.exec

Runtime.getRuntime().exec("cmd /c start java -jar ..\\server\\server.jar -Dlog4j.configuration=file:src\\test\\resources\\log4j.properties -filename src\\test\\resources\\server.properties"); 

但它顯示cmd窗口,我無法摧毀它。所以我想用

Runtime.getRuntime().exec("java -jar ..\\server\\server.jar -Dlog4j.configuration=file:src\\test\\resources\\log4j.properties -filename src\\test\\resources\\scIntegration.properties"); 

但它根本不連接到服務器。那爲什麼呢?

一個相關的問題。我該如何結束這個過程?這是一個「不結束」的服務器。所以我必須殺死它,並且我會假設,只運行java命令將會被銷燬,但是在cmd我沒有運氣。

回答

0

服務器outputing東西到stdout和縮短命令版本,它沒有地方輸出,所以它試圖輸出一些數據時卡住了。解決方法是將stdout傳輸到例如某個文件。

0

嘗試使用java程序的絕對路徑。

對於銷燬:exec()返回一個java.lang.Process,你應該能夠銷燬它。如果沒有,你必須實現某種回調來關閉你的服務器,例如監聽關機命令的特定文件。

+0

我已經嘗試過絕對路徑。沒用。我無法在服務器中實現任何東西,這是Process.destroy()的問題。 – Trimack 2010-08-23 13:00:00

2

你應該分裂您的命令到一個數組中,第一個參數是實際的命令運行和所有其餘的都是這樣的參數命令:

Runtime.getRuntime().exec(new String[] {"/usr/bin/java", "-jar", "..\\server\\server.jar" ...}); 
+0

我試過用相同的結果:( – Trimack 2010-08-23 13:39:42