2

さて、ここに問題があります。MyClass1とMyClass2の3つのクラスとExecClassがあります。コマンドプロンプトに移動して、次の操作を行います。

$java MyClass1 -exec "java MyClass2 arg1 arg2"

これは完璧に機能します。現在、ExecClassには、次の行があります。

Runtime.getRuntime().exec("java MyClass1 -exec \"java MyClass2 arg1 arg2\"");

問題は、2番目の文字列を最初の文字列とまったく同じように出力する場合ですが、ExecClassを実行すると、MyClass1は次のように文句を言います。認識されない引数arg1が失敗します。少しデバッグした後、最初のケースでは、ターミナルから直接呼び出しているときに、引用符で囲まれた文字列全体が1つの引数(arg [1])であり、2番目のケースではarg.length=5であることがわかりました。それは基本的にそれらを分割します...私にはいくつかの未知の理由があります。誰かが知っていれば、Runtime.exec()が機能するという回避策を知る必要があります。PS:私のWindowsマシンでは、このような問題はLinuxだけでは発生しません。これはubuntu破壊カーネルです:2.6.32-279.14.1.el6.x86_64。

4

1 に答える 1

4

Runtime.exec、他の言語の-like関数とは異なりsystem()、コマンドを解析するためにシェルを呼び出しません(二重引用符で囲まれた文字列はシェル機能です)。

文字列を希望どおりに分割するには、文字列配列を受け入れるRuntime.execを使用します。

Runtime.getRuntime().exec(new String[] { "java", "MyClass1", "-exec", "java MyClass2 arg1 arg2"});
于 2013-01-26T04:50:05.247 に答える