<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java調用其他程序的問題

    ?

    大家都知道java調用cmd 用的是Runtimeexec()方法。該方法最終重啟一個進程去執行命令,因為該方法最終調用了
    ProcessBuilder

    1?public?Process?exec(String[]?strings,?String[]?strings_2_,?File?file)
    2????throws?IOException?{
    3????return?new?ProcessBuilder(strings).environment(strings_2_).directory
    4???????????(file).start();
    5????}
    既然是重啟了一個進程,那么就存在異步的問題,但是在很多情況在更想同步的調用Runtimeexec(),那么怎么辦呢?
    Runtime.exec()
    的返回值Process提供了waitFor()方法,可以達到阻塞新進程的目的。但是只調用waitFor(),該字線程就會
    一直阻塞,所以只調用waitFor()還是不夠的,我們需要以讀取他的輸出流的方式來阻塞住線程,當輸出流讀取結束的
    時候讓阻塞結束,代碼如下:
    ?? 通過讀取輸出流和調用process.waitFor()可以的實現調用Runtime.exec()的同步。
    ??
    另外還有一種情況可以使Runtime.exec()出現阻塞,Runtimeexec()在執行時會產生兩種輸出流:錯誤輸出流和標準輸出流,當進程結束時會關閉這兩個流,在上面的代碼里只讀取了標準輸出流而沒有導致錯誤輸出流,由于錯誤輸出流中的數據沒有被讀取,進程就不會結束,因此調用readLine()方法時整個程序就會阻塞,因此,我們不僅要讀取標準輸出流還要讀取錯誤輸出流,由于讀取這些流都會阻塞,所以想同時讀取兩個流還不是那么容易,一種辦法就是啟動線程分別讀取不同的輸出流,另外一個辦法就是使用ProcessBuilder來執行(前面已經說過了Runtime.exec()最終也是調用ProcessBuilder來執行的),因為ProcessBuilder有一個redirectErrorStream(),方法設置為redirectErrorStream(true),就可以使錯誤輸出流合并到標準輸出流,這樣我們就只需要讀取標準輸出流就可以完全解決問題了,代碼如下:
    還是也介紹下使用線程來分別讀取錯誤輸出流和標準輸出流吧:
    ?

    好了,今天就先寫到這里吧。



    posted on 2008-10-09 13:32 linda 閱讀(1789) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2008年10月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統計

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 青柠影视在线观看免费| 2019亚洲午夜无码天堂| 亚洲高清免费视频| 亚洲精品国产精品国自产观看 | 亚洲AV无码成人精品区狼人影院| 99久热只有精品视频免费看| 亚洲人成网www| 7m凹凸精品分类大全免费| 久久精品国产亚洲AV香蕉| 最近中文字幕免费2019| 亚洲人成网站日本片| 女人18毛片免费观看| 亚洲国产成人AV在线播放| 免费国产在线观看不卡| 日本高清不卡中文字幕免费| 久久精品国产精品亚洲人人| 99免费精品视频| 亚洲精品一卡2卡3卡三卡四卡| 国产桃色在线成免费视频| 亚洲精华国产精华精华液好用| 免费中文字幕在线观看| 怡红院免费全部视频在线视频| 久久久久亚洲AV无码专区体验| 国色精品卡一卡2卡3卡4卡免费| 亚洲老熟女五十路老熟女bbw| 亚洲?V无码乱码国产精品| 一级有奶水毛片免费看| 亚洲综合久久综合激情久久| 蜜桃视频在线观看免费网址入口| 最新亚洲人成无码网www电影| 亚洲中文字幕成人在线| 99久久免费精品高清特色大片| 亚洲已满18点击进入在线观看| 午夜亚洲av永久无码精品| a毛片在线免费观看| 亚洲一欧洲中文字幕在线| 又大又粗又爽a级毛片免费看| 最近中文字幕大全免费版在线| 色偷偷亚洲女人天堂观看欧| 亚洲av日韩av欧v在线天堂| 99久久人妻精品免费二区|