隨筆-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
          主站蜘蛛池模板: 凤翔县| 宁明县| 山阴县| 宜兰市| 兴义市| 体育| 通化市| 汤原县| 柏乡县| 胶州市| 陵川县| 汾西县| 西和县| 礼泉县| 郑州市| 霍林郭勒市| 鄂托克旗| 祁连县| 五莲县| 怀安县| 邵阳县| 长子县| 怀集县| 志丹县| 呼伦贝尔市| 南部县| 镇巴县| 景东| 大庆市| 长沙市| 开阳县| 民丰县| 平泉县| 香港| 崇义县| 富顺县| 灵宝市| 吉安县| 万荣县| 武清区| 堆龙德庆县|