Java流程可以从不同的位置执行吗?

Sam*_*Sam 2 java runtime

我想要从不同的位置创建一个进程到我的应用程序jar所在的位置,但我不确定它是否可能,或者是否可行,如何进行.

例如,这是我正在研究的一个Minecraft包装器

Runtime rt = Runtime.getRuntime();

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

Process pr = rt.exec(proc);
Run Code Online (Sandbox Code Playgroud)

这将从当前位置执行minecraft jar(这使得minecraft地图和服务器配置文件出现在当前文件夹中,这不是我想要的).


我可以通过将命令'cd'放入bat文件或bash脚本来实现它,它看起来像:

cd minecraft/
java -Xms512M -Xmx1024M -jar ../minecraft_server.jar nogui
Run Code Online (Sandbox Code Playgroud)

然后我的代码就会变成

Runtime rt = Runtime.getRuntime();

String proc = "mc.bat";

Process pr = rt.exec(proc);
Run Code Online (Sandbox Code Playgroud)

这将从我想要的子目录'minecraft /'执行minecraft.jar.但是,如果可能的话,我非常希望在Java应用程序中执行此操作,而无需使用批处理文件/ bash脚本.

Jac*_*nds 7

假设你可以使用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();
Run Code Online (Sandbox Code Playgroud)