2011-11-21 31 views
2

我想從一個不同的位置創建一個流程到我的應用程序jar所在的位置,但我不確定它是否有可能或者是否如此。可以從不同位置執行Java進程?

例如,這是我的世界包裝我正在

Runtime rt = Runtime.getRuntime(); 

String proc = "java -Xms512M -Xmx1024M -jar minecraft_server.jar nogui"; 

Process pr = rt.exec(proc); 

這將執行從當前位置的Minecraft罐子(這讓我的世界地圖和服務器配置文件出現在當前文件夾中,其不是我想要的)。


我可以通過將命令 'CD' 成bat文件或bash腳本看起來實現它像:

cd minecraft/ 
java -Xms512M -Xmx1024M -jar ../minecraft_server.jar nogui 

然後我的代碼將成爲

Runtime rt = Runtime.getRuntime(); 

String proc = "mc.bat"; 

Process pr = rt.exec(proc); 

哪樣從我想要的子目錄「minecraft /」中執行minecraft.jar。但是,如果可能的話,我非常希望在Java應用程序中執行此操作,而無需使用批處理文件/ bash腳本。

+0

你可以看到我的回答關於它的[這個問題](http://stackoverflow.com/questions/6811522/changing-the-working-directory-of-command-from-java/42281455#42281455 ) –

回答

6

假設您可以使用Java 1.5或更高版本,我建議使用ProcessBuilder而不是Runtime。它可以讓你輕鬆設置進程的工作目錄。

final Process pr = new ProcessBuilder(
    "java", 
    "-Xms512M", 
    "-Xmx1024M", 
    "-jar", 
    "minecraft_server.jar", 
    "nogui") 
    .directory(new File("minecraft")) //Set the working directory to ./minecraft/ 
    .start(); 
+0

這是我正在尋找的,但.directory不期望一個參數 – Sam

+0

@Sam'目錄'有兩個重載。一個告訴你當前的工作目錄,另一個設置它。請參閱http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html#directory%28java.io.File%29 –

+0

編輯完成後,非常感謝 – Sam