首页 > 解决方案 > 无法使用 java 运行外部 jar

问题描述

我想用java运行一个外部jar,所以我尝试使用Runtime.getRuntime().exec("java -jar path to my file.jar")但它不会运行,我在控制台中没有错误。我尝试了 ProcessBuilder 和同样的问题。有人可以帮我吗?

https://i.stack.imgur.com/RqINN.png

顺便说一句,当我在 cmd 中执行命令时它可以工作

标签: javaruntimeexecutable-jarprocessbuilder

解决方案


在 java 中,您实际上不能依赖可以找到的 java 可执行文件。“从我的 java 应用程序中启动另一个 VM”不是 java 自然提供的。

  1. 您的 jar 文件中可能有空格。我强烈建议您始终使用ProcessBuilder, 并使用采用字符串数组/字符串集合而不是一个大字符串的形式,以避免空格问题(一个大字符串意味着 java 只会在空格上拆分,并且对输入比您可能从命令行习惯的输入,其中 bash 做了很多。

  2. 一般来说,电话java或其他任何相关的事情都是非常不确定的。您应该输入一个完全合格的路径。这自然会导致以下问题:是的,嗯,我不知道 java 可执行文件在哪里。是的,但你也不知道操作系统知道它在哪里。在 Windows 上,它甚至不是正确的可执行文件(javaw可能是您想要的,在其他平台上不存在)。首先从你机器上的绝对路径开始,只是为了检查问题是java不是相对的。

因此,从这里开始:

public static void main(String[] args) throws Exception {
    ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Java\\Java 1.8\\javaw.exe", "-jar" "C:\\Users\\Erwann\\Desktop\\aled.jar");
    Process p = pb.start();
}

将路径修复为您的 java实际所在的位置(我刚刚开辟了一条路径!)

然后,根据这是否有效,接下来的步骤是找出 jar 出了什么问题,或者找出如何动态获取该路径(这并不容易,而且会很困难进行测试,因为它基本上是依赖于系统的代码)。


推荐阅读