【问题标题】:Java process execution possible from different location?可以从不同位置执行 Java 进程吗?
【发布时间】:2011-11-21 17:42:03
【问题描述】:

我想从与我的应用程序 jar 所在位置不同的位置创建一个进程,但我不确定这是否可行,或者如果可行,该怎么做。

例如,这是我正在开发的 Minecraft 包装器

Runtime rt = Runtime.getRuntime();

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

Process pr = rt.exec(proc);

这将从当前位置执行 minecraft jar(这会使 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 脚本。

【问题讨论】:

标签: java runtime


【解决方案1】:

假设您可以使用 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();

【讨论】:

  • 这是我要找的,但是 .directory 不需要参数
  • @Sam directory 有两个重载。一个告诉你当前的工作目录,另一个设置它。见download.oracle.com/javase/1.5.0/docs/api/java/lang/…
  • 我是否更正了此解决方案不适用于系统路径上定义的程序?例如 ANT,它在我的系统路径中定义。通过控制台它工作正常但是当我使用这个解决方案时,我得到了异常:java.io.IOException: Cannot run program "ant" (in directory "C:\composed_projects"): CreateProcess error=2, The system cannot find the file specified
猜你喜欢
  • 1970-01-01
  • 2019-10-19
  • 2011-12-09
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多