0

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

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

4

1 に答える 1

1

Java コマンド ランチャーはシェルではありません。うまく終了しないため、引用符やスペース区切りのコマンドは使用しないでください。各引数を余分な引用符なしで個別の文字列に入れ、exec(String[])メソッドを使用します。

于 2013-11-11T04:41:29.720 に答える