Возможно ли выполнение процесса Java из другого места? - PullRequest
2 голосов
/ 21 ноября 2011

Я хочу создать процесс из другого места, где находится jar моего приложения, но я не уверен, возможно ли это или нет, как это сделать.

Например,это оболочка для майнкрафта, над которой я работаю

Runtime rt = Runtime.getRuntime();

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

Process pr = rt.exec(proc);

Это запустит банку майнкрафта из текущего местоположения (в результате карта карты майнкрафта и файлы конфигурации сервера появятся в текущей папке, а это не то, что мне нужно).


Я могу добиться этого, поместив команду '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.jar из подкаталога minecraft /, что я и хочу.Однако я бы очень хотел сделать это в приложении Java, если это возможно, без использования командного файла / скрипта bash.

1 Ответ

7 голосов
/ 21 ноября 2011

Если вы можете использовать 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();
...