Java 命令行参数在控制台中工作,在Runtime.getRuntime().exec中失败

Java 命令行参数在控制台中工作,在Runtime.getRuntime().exec中失败,java,Java,尝试为java游戏构建一个基本的启动器。我正在生成运行应用程序的正确命令。当以下命令在启动器中执行时,启动器将按预期关闭,但该命令似乎不起作用-要么不起作用,要么游戏启动并立即崩溃 当我将相同的命令打印到控制台并将其复制/粘贴到控制台并手动执行时,它工作得非常好 /** * */ protected void launch(){ currentStatusMsg = "Launching..."; String cmd = "java -jar"; cmd +=

尝试为java游戏构建一个基本的启动器。我正在生成运行应用程序的正确命令。当以下命令在启动器中执行时,启动器将按预期关闭,但该命令似乎不起作用-要么不起作用,要么游戏启动并立即崩溃

当我将相同的命令打印到控制台并将其复制/粘贴到控制台并手动执行时,它工作得非常好

/**
 * 
 */
protected void launch(){

    currentStatusMsg = "Launching...";

    String cmd = "java -jar";
    cmd += " -Djava.library.path=\"" +nativesDirectory.getAbsolutePath() + "\"";
    cmd += " \""+applicationJar.getAbsolutePath() + "\"";

    System.out.println(cmd);

    try {
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec(cmd);
        //closeLauncher();

        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String line=null;

        while((line=input.readLine()) != null) {
            System.out.println(line);
        }

        int exitVal = pr.waitFor();
        System.out.println("Exited with error code "+exitVal);

    } catch(Exception e) {
        System.out.println(e.toString());
        e.printStackTrace();
    }
}
我尝试添加一些内容来读取输出,但没有打印任何内容

我最初使用以下格式,但效果相同:

Process pr = Runtime.getRuntime().exec(new String[]{
                "java",
                "-Djava.library.path=\"" +nativesDirectory.getAbsolutePath() + "\"",
                "-jar",
                applicationJar.getAbsolutePath()});
更新在允许调试代码运行之前,我意识到我正在关闭启动器。系统仅打印:“已退出,错误代码为1”

我终于能够打印出子流程错误。它说:

线程“main”java.lang.UnsatifiedLinkError中出现异常:java.library.path中没有lwjgl


但是,它应该是可用的,因为我正在执行的命令包含库路径,当手动运行这个确切的命令时,它工作正常。

java命令启动器不是shell。不要使用引号和空格分隔的命令,因为这样做不会有好的结果。将每个参数放入一个单独的字符串中,无需任何额外的引号,并使用
exec(String[])
方法。

引号将自动处理,因为路径中经常有空格。我已更新了帖子。我最初使用的是
字符串[]
,但结果相同。@botsknet-您只需要在使用shell时引用,这就是为什么我指示您应该删除所有引号(这就是库路径仍然不起作用的原因)。