尝试为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”
我终于能够打印出子进程错误了。它声明:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
但是,它应该可用,因为我正在执行的命令包括库路径,并且当手动运行这个确切的命令时,它可以正常工作。
答案 0 :(得分:1)
java命令启动器不是shell。不要使用引用和空格分隔的命令,因为它不会很好地结束。将每个参数放入一个单独的String中,不需要任何额外的引用,并使用exec(String[])
方法。