0

コマンドを介して別のJavaアプリケーションを起動するJavaベースのアプリケーションランチャーを使用していますProcessBuilder(同様に試しました)。Runtime.getRuntime().exec(new String[]{}

コマンドを手動で実行すると、正しく動作します。ゲームが起動します。エラーはありません。

java -jar -Djava.library.path="./lib/natives" mygame.jar

ランチャーから同じコマンド (絶対パスを使用) を実行すると、次のようになります。

ProcessBuilder pb = new ProcessBuilder(
        "java",
        "-jar",
        "-Djava.library.path=\"" +nativesDirectory.getAbsolutePath() + "\"",
        applicationJar.getAbsolutePath());
pb.redirectErrorStream(true);
pb.directory(applicationDirectory);

次のエラーが表示されます。

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

複数のバリエーションを試しましたが、コマンドが Java ランチャーから実行されたときにライブラリ パスを適切に設定しないようです。

  1. 他に試せることはありますか?コマンドは機能するのに、ランチャーが機能しないのはなぜですか? ファイルパスのスペースに問題があるのではないかと心配していたので、 ProcessBuilder を試しました(引用符で囲まれているにもかかわらず)

  2. アプリケーションに libs/native ファイルの場所を指示/検出させ、常に引数を渡す必要を回避するより良い方法はありますか?

4

2 に答える 2

1

パスを囲む引用符を削除するとどうなりますか? 引用符はシェルによって解析され、Java から直接プロセスを生成する場合は必要ありません。

于 2013-11-12T00:29:21.050 に答える