无法使用Java运行外部jar

问题描述

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

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

顺便说一句,当我在cmd中执行命令时,它会起作用

解决方法

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

  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 实际上所在的位置(我刚刚做了一条路径!)

然后,根据是否可行,下一步是确定罐子出了什么问题,或者找出如何动态获取该路径(这并不容易,而且会很难测试,因为它基本上是系统相关的代码。

,

如果要使用相同的Java版本启动,可以尝试使用引用 java.home 的命令,并执行一些操作来收集stdout /错误流,以便确定错误原因。例如这样的东西:

String java = Path.of(System.getProperty("java.home"),"bin","java").toAbsolutePath().toString();
String [] cmd = new String[] {java,"-jar",pathToJar,"arg1","etc ..."};

ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(new File("stdout.log"));
pb.redirectError(new File("stderr.log"));
Process p = pb.start();
int rc = p.waitFor();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...