隨筆-50  評論-55  文章-8  trackbacks-0

          現象:
          ??????? Runtime.exec() 方法創建標準的輸出的管道。 當子進程,往完全緩沖區此管道寫入大量數據時,它阻止在管道上直到管道緩沖區中的數據讀取父進程。 如果父進程將永遠不會讀取標準輸出, 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("執行成功!");
          ?????}
          ???? 類PrintStream,網上找的,主要是打印信息
          ??? 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、解決方案
          ????? 若要避免阻止,請確保父進程始終讀取標準輸出從子進程。

          posted on 2009-01-04 16:38 蔣家狂潮 閱讀(663) 評論(0)  編輯  收藏 所屬分類: Basic
          主站蜘蛛池模板: 武强县| 德格县| 柏乡县| 宁蒗| 阳春市| 清苑县| 汉沽区| 太保市| 开远市| 深水埗区| 萨迦县| 四川省| 桐乡市| 榆社县| 和静县| 万载县| 耿马| 东方市| 阳山县| 滦平县| 抚州市| 塔城市| 鹿泉市| 海林市| 灵宝市| 曲松县| 澳门| 固阳县| 秀山| 伊春市| 庆元县| 广饶县| 曲阜市| 阳谷县| 定南县| 呼和浩特市| 五指山市| 虞城县| 阜平县| 元阳县| 光泽县|