隨筆-50  評(píng)論-55  文章-8  trackbacks-0

          現(xiàn)象:
          ??????? Runtime.exec() 方法創(chuàng)建標(biāo)準(zhǔn)的輸出的管道。 當(dāng)子進(jìn)程,往完全緩沖區(qū)此管道寫入大量數(shù)據(jù)時(shí),它阻止在管道上直到管道緩沖區(qū)中的數(shù)據(jù)讀取父進(jìn)程。 如果父進(jìn)程將永遠(yuǎn)不會(huì)讀取標(biāo)準(zhǔn)輸出, Process.waitFor() 不返回。
          1、程序代碼
          ????? StringBuffer command = new StringBuffer();
          ???? ?command .append("你需要的命令行");
          ????? Runtime rt = Runtime.getRuntime();
          ????? Process process=rt.exec(command.toString());
          ????? int pflag = -1;
          ????? //重要,解決死鎖的方案
          ??????new PrintStream(process.getInputStream()).start();
          ????? pflag=process.waitFor();
          ????? if(pflag!=-1){
          ???????System.out.println("執(zhí)行成功!");
          ?????}
          ???? 類PrintStream,網(wǎng)上找的,主要是打印信息
          ??? class PrintStream extends Thread{
          ??? ?java.io.InputStream __is = null;
          ??? ??public PrintStream(java.io.InputStream is)??{
          ????? ??__is = is;
          ???? ?}

          ???? public void run()?{
          ????? ?try??{
          ?????? while(this != null)?{
          ????? ?int _ch = __is.read();
          ?????if(_ch != -1)
          ??????System.out.print((char)_ch);
          ?????else break;
          ????}
          ???}
          ???catch (Exception e)
          ???{
          ????e.printStackTrace();
          ???}
          ??}
          ?}
          2、解決方案
          ????? 若要避免阻止,請(qǐng)確保父進(jìn)程始終讀取標(biāo)準(zhǔn)輸出從子進(jìn)程。

          posted on 2009-01-04 16:38 蔣家狂潮 閱讀(663) 評(píng)論(0)  編輯  收藏 所屬分類: Basic
          主站蜘蛛池模板: 浮梁县| 浦东新区| 灵山县| 泾源县| 常德市| 鄯善县| 肥乡县| 怀仁县| 北宁市| 台东县| 永康市| 娄烦县| 昭苏县| 内乡县| 邵武市| 建平县| 康保县| 绵阳市| 阿巴嘎旗| 曲沃县| 丰都县| 长春市| 青神县| 新源县| 乾安县| 淮南市| 武宣县| 邢台县| 泗阳县| 新泰市| 仁寿县| 张家界市| 桐梓县| 株洲市| 阜南县| 准格尔旗| 扎鲁特旗| 威信县| 都昌县| 和静县| 板桥市|