ホームページ >Java >&#&チュートリアル >Runtime.exec() と ProcessBuilder: コマンドがコード 1001 で終了するのはなぜですか?

Runtime.exec() と ProcessBuilder: コマンドがコード 1001 で終了するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-29 13:32:09639ブラウズ

Runtime.exec() vs ProcessBuilder: Why Does My Command Exit with Code 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 を作成することもできます。それを次のように ProcessBuilder に渡します:

List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
Process p = new ProcessBuilder(params).start();

以上がRuntime.exec() と ProcessBuilder: コマンドがコード 1001 で終了するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。