6

exec()呼び出しを介してプロセスを作成したばかりで、現在は.waitFor()メソッドを使用しています。InterruptedExceptionをキャッチする必要がありますが、catchコードブロックに何を配置すべきかわかりません。終了コードを受け取りたいのですが、現在のスレッドが中断された場合は受け取りません。スレッドが中断された場合に終了コードをプロセスから除外するにはどうすればよいですか?

例:

import java.io.IOException;


public class Exectest {
public static void main(String args[]){
      int exitval;

      try {
        Process p = Runtime.getRuntime().exec("ls -la ~/");
        exitval = p.waitFor();
        System.out.println(exitval);
    } catch (IOException e) {
        //Call failed, notify user.
    } catch (InterruptedException e) {
        //waitFor() didn't complete. I still want to get the exit val. 
        e.printStackTrace();
    }

}
}
4

1 に答える 1

10

私があなたなら、これをキャッチブロックに入れます:

p.destroy();
exitval = p.exitValue();

スレッドが中断されたため、問題が発生しました。destroy()はプロセスを強制的に終了し、exitValue()は終了値を提供します(終了したため、エラーコードになります)。

詳細http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Process.html

于 2011-05-28T12:24:06.383 に答える