回覆列表
  • 1 # JAVA架構師之路

    在java中呼叫作業系統的程式時,可以使用java.lang.Runtime.getRuntime().exec() 來實現,但是這個方法在呼叫命令後就直接返回當前執行緒了;程式設計時,有時候需要在等待呼叫的系統程式完成操作後,當前執行緒才能做下一步操作,此時可以用類Process的方法waitFor()來實現,它會阻塞當先執行緒直至呼叫程式執行結束java.lang.Process process = java.lang.Runtime.getRuntime().exec("");//執行命令生成cube try {

    process.waitFor();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    proc_stat = checkFileSize() ? "1" : "3";

    [java] view plain copy

    java.lang.Process process = java.lang.Runtime.getRuntime().exec("");//執行命令生成cube

    try {

    process.waitFor();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    proc_stat = checkFileSize() ? "1" : "3";

    Process的方法waitFor()介紹,取自API文件:

    waitFor

    public abstract int waitFor()

    throws InterruptedException導致當前執行緒等待,如果必要,一直要等到由該 Process 物件表示的程序已經終止。如果已終止該子程序,此方法立即返回。如果沒有終止該子程序,呼叫的執行緒將被阻塞,直到退出子程序。

    返回:

    程序的出口值。根據慣例,0 表示正常終止。

    丟擲:

    InterruptedException - 如果當前執行緒在等待時被另一執行緒 中斷,則停止等待,丟擲 InterruptedException。

    自我實踐:

    執行多條cmd命令

    String cmd = "cmd /c G: && cd G:\\projects\\testProject && start mvn package";

    Process process = Runtime.getRuntime().exec(cmd);

    process.waitFor();

    process.exitValue() ;

    這樣可以執行多條命令。

    值得注意的是:執行 start mvn package,會開啟視窗,呼叫process.waitFor(),主執行緒不會被阻塞,而是會返回執行成功process.exitValue() == 0

    將start mvn package中start去掉後,主執行緒就會阻塞,直到cmd命令開啟的子程序執行完畢,然後執行主執行緒。

  • 中秋節和大豐收的關聯?
  • 因特網,全球資訊網WWW和WAP網的聯絡與區別是什麼?