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
ただし、実行しているコマンドにはライブラリ パスが含まれているため、使用できるはずです。この正確なコマンドを手動で実行すると、正常に動作します。