gpt4 book ai didi

java - 命令行参数在控制台中有效,在 Runtime.getRuntime().exec 中失败

转载 作者:行者123 更新时间:2023-12-01 13:51:54 26 4
gpt4 key购买 nike

尝试为 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()});

更新我意识到我在允许调试代码运行之前关闭了启动器。系统只打印:“Exited with error code 1”

我终于能够打印子进程错误了。它指出:

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

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

最佳答案

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

关于java - 命令行参数在控制台中有效,在 Runtime.getRuntime().exec 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com