无法使用java运行外部jar

无法使用java运行外部jar,java,runtime,executable-jar,processbuilder,Java,Runtime,Executable Jar,Processbuilder,我想用java运行一个外部jar,所以我尝试使用Runtime.getRuntime().exec(“java-jar-path to my file.jar”),但它不会运行,而且控制台中没有错误。 我试着用ProcessBuilder解决同样的问题。 有人能帮我吗 顺便说一句,当我在cmd中执行命令时,它就可以工作了。实际上,在java中,您不能依赖于可以找到的java可执行文件。“从我的java应用程序中启动另一个VM”并不是java自然提供的功能 您的jar文件中可能有一个空格。我强烈

我想用java运行一个外部jar,所以我尝试使用
Runtime.getRuntime().exec(“java-jar-path to my file.jar”)
,但它不会运行,而且控制台中没有错误。 我试着用ProcessBuilder解决同样的问题。 有人能帮我吗


顺便说一句,当我在cmd中执行命令时,它就可以工作了。实际上,在java中,您不能依赖于可以找到的java可执行文件。“从我的java应用程序中启动另一个VM”并不是java自然提供的功能

  • 您的jar文件中可能有一个空格。我强烈建议您始终使用
    ProcessBuilder
    ,并使用字符串数组/字符串集合的形式,而不是一个巨大的字符串,以避免出现空格问题(这一个巨大的字符串意味着java将只在空格上拆分,并且对输入的处理远远少于您在命令行中使用的处理,而bash在命令行中做了很多

  • 一般来说,调用
    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的错误,要么是找出如何动态地获得该路径(这并不容易,而且很难测试,因为它基本上是依赖于系统的代码).

    如果要使用相同的Java版本启动,可以尝试引用Java.home的命令,并采取措施收集标准输出/错误流,以便确定错误原因。例如:

    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();
    

    请告诉我们您试图执行的真正命令。这可能很重要。现在好了吗(刚开始使用stackoverflow哈哈)?META-INF/MANIFEST.MF
    file.jar
    内的
    文件中有什么?清单版本:1.0 Rsrc类路径:./Class路径:.Rsrc主类:应用程序。主类:org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader