ホームページ >Java >&#&チュートリアル >Runtime.exec() と ProcessBuilder: コマンドがコード 1001 で終了するのはなぜですか?
ProcessBuilder と Runtime.exec(): 比較
Java から外部コマンドを実行する場合、開発者はランタイムを使用するかどうかのジレンマに遭遇することがよくあります。 getRuntime().exec(...) と新しい ProcessBuilder(...).start()。これら 2 つのアプローチの違いを明らかにするために、それらの動作を詳しく調べてみましょう。
ケーススタディ
Runtime.exec() とProcessBuilder は特定のコマンドを実行するために使用されますが、顕著な違いが生じます。 Runtime.exec() を使用すると、コマンドは終了値 0 で正常に終了します。ただし、ProcessBuilder を使用する場合、終了値は 1001 となり、コマンドは途中で終了します。
根本原因
矛盾は、exec() と ProcessBuilder のコマンド引数の処理方法にあります。 exec() は単一の文字列または文字列の配列を受け入れ、入力を引数にトークン化します。対照的に、ProcessBuilder は文字列の可変引数配列または List
解決策
問題を解決するにはProcessBuilder を使用する場合は、コマンド引数が別の文字列として指定されていることを確認してください。たとえば、次の代わりに:
Process p = new ProcessBuilder( "C:\DoStuff.exe -arg1 -arg2" ).start();
これを使用します:
Process p = new ProcessBuilder( "C:\DoStuff.exe", "-arg1", "-arg2" ).start();
代わりに、List
List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); Process p = new ProcessBuilder(params).start();
以上がRuntime.exec() と ProcessBuilder: コマンドがコード 1001 で終了するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。