在java中調用操作系統的程序時,可以使用java.lang.Runtime.getRuntime().exec()來實現,但是這個方法在調用命令后就直接返回當前線程了;程序設計時,有時候需要在等待調用的系統程序完成操作后,當前線程才能做下一步操作,此時可以用類Process的方法waitFor()來實現,它會阻塞當先線程直至調用程序運行結束java.lang.Processprocess=java.lang.Runtime.getRuntime().exec("");//執行命令生成cubetry{
process.waitFor();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
proc_stat=checkFileSize()?"1":"3";
[java]viewplaincopyjava.lang.Processprocess=java.lang.Runtime.getRuntime().exec("");//執行命令生成cube
try{
process.waitFor();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
proc_stat=checkFileSize()?"1":"3";
Process的方法waitFor()介紹,取自API文檔:
waitFor
publicabstractintwaitFor()
throwsInterruptedException導致當前線程等待,如果必要,一直要等到由該Process對象表示的進程已經終止。如果已終止該子進程,此方法立即返回。如果沒有終止該子進程,調用的線程將被阻塞,直到退出子進程。
返回:
進程的出口值。根據慣例,0表示正常終止。
拋出:
InterruptedException-如果當前線程在等待時被另一線程中斷,則停止等待,拋出InterruptedException。
自我實踐:
執行多條cmd命令
Stringcmd="cmd/cG:&&cdG:\\projects\\testProject&&startmvnpackage";
Processprocess=Runtime.getRuntime().exec(cmd);
process.waitFor();
process.exitValue();
這樣可以執行多條命令。
值得注意的是:執行startmvnpackage,會開啟窗口,調用process.waitFor(),主線程不會被阻塞,而是會返回執行成功process.exitValue()==0
將startmvnpackage中start去掉后,主線程就會阻塞,直到cmd命令開啟的子進程執行完畢,然后執行主線程。