【问题标题】:How to run a .jar file from within Java program?如何从 Java 程序中运行 .jar 文件?
【发布时间】:2013-07-15 15:17:42
【问题描述】:

我在这里基本上想要做的是运行一个 .jar 文件,该文件位于

C/Users/-any user here-/appdata/Roaming/-my folder here-/-file name here-.jar

我是否以某种方式打开 CMD 并执行以下操作:

cd appdata/Roaming/<Folder>
java -jar <FileName>.jar

当我将它输入 CMD 本身时,这似乎有效。从 java 程序运行时,我似乎无法使其工作。

我尝试过:

Runtime.getRuntime().exec("cd appdata/Roaming");

我收到指定目录不存在的错误。

【问题讨论】:

  • 一些提示。阅读(并实施)所有When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并使用ProcessBuilder 构建Process。还要将 String arg 拆分为 String[] args 以说明本身包含空格的参数。
  • @AndrewThompson 这似乎是对我的回答,而不仅仅是评论。
  • @ViktorSeifert 如果该问题尚未提供(正确)答案,我可能会将其作为一个答案提交。当然,它可能会成为 OP 发布的接下来几个问题的答案。 ;)

标签: java process cmd command runtime.exec


【解决方案1】:

您只需在类路径中添加 jar 的路径(不要忘记使用绝对路径),并在代码中调用 jar 的 main 方法。但是,此解决方案是特定于用户的,因为路径将被硬编码,除非您想深入研究更棘手的问题 (How do you change the classpath within java)。

【讨论】:

  • 天哪.. 这就是我输入我需要的内容的原因。我正在制作一个类似 Minecraft 的启动器,它将从计算机上的任何位置启动我位于 appdata/Roaming 中的游戏。
  • 好吧,如果你使用绝对路径,它会的。但仅在您的计算机上,为您的用户;)
【解决方案2】:

使用绝对路径而不是相对路径,这样可以防止从任何工作目录运行时找不到路径。否则,如 Nizil 所说,将其添加到您的类路径中。

要获取当前用户的名称,请使用 System.getProperty("user.name") 并连接到您的路径中。

user = System.getProperty("user.name");
cmd = "java -jar C/Users/" + user + "/appdata/Roaming/<folder>/<file>.jar";
Runtime.getRuntime().exec(cmd);

【讨论】:

  • 我怎么知道用户的名字是什么?
  • 与变量连接?您不能使用通配符来搜索用户,因为如果有多个用户,您如何知道要获取哪个用户?
  • @user2098268 查看stackoverflow.com/questions/797549/get-login-username-in-java 中接受的答案以获取用户名。
  • 我会在这里添加。谢谢@ViktorSeifert
  • 另外我应该提到,来自正在运行的进程的cd-ing 并不意味着工作目录将更改为后续调用Runtime.getRuntime().exec(...) 。这只是使用绝对路径的另一个原因。
猜你喜欢
  • 2013-06-30
  • 1970-01-01
  • 2013-08-01
  • 2016-12-10
  • 1970-01-01
  • 2011-06-23
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多