Titan專欄

          用文字來整理生命

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            44 隨筆 :: 49 文章 :: 19 評論 :: 0 Trackbacks

          牛牛發現問題的原因,Process  process=Runtime.getRuntime().exec("");中產生停滯(阻塞,blocking)。

          這個是因為Runtime.getRuntime().exec()要自己去處理stdout和stderr的。 
          所以如果你想讓程序正常運行的話,請務必將上述用別的線程流取走。 
           
          >test.bat 
          haha 
          exit  99 
           
          >RuntimeTest.java 
          public  class  RuntimeTest  { 
           
                     public  static  void  main(String[]  args)  { 
                                 try  { 
                                             Process  process=Runtime.getRuntime().exec("test.bat"); 
                                             StreamGobbler  errorGobbler  =  new  StreamGobbler(process.getErrorStream(),  "ERROR");                         
                          
                                     //  kick  off  stderr 
                                     errorGobbler.start(); 
                                      
                                     StreamGobbler  outGobbler  =  new  StreamGobbler(process.getInputStream(),  "STDOUT"); 
                                     //  kick  off  stdout 
                                     outGobbler.start(); 
                                      
                                             process.waitFor(); 
                                             System.out.println(process.exitValue()); 
                                 }  catch(Exception  e)  {}             
                     } 

           
           
          >StreamGobbler.java 
          import  java.io.BufferedReader; 
          import  java.io.IOException; 
          import  java.io.InputStream; 
          import  java.io.InputStreamReader; 
          import  java.io.OutputStream; 
          import  java.io.PrintWriter; 
           
          public  class  StreamGobbler  extends  Thread  { 
                     InputStream  is; 
                     String  type; 
                     OutputStream  os; 
                  
                     StreamGobbler(InputStream  is,  String  type)  { 
                                 this(is,  type,  null); 
                     } 
           
                 StreamGobbler(InputStream  is,  String  type,  OutputStream  redirect)  { 
                         this.is  =  is; 
                         this.type  =  type; 
                         this.os  =  redirect; 
                 } 
                  
                 public  void  run()  { 
                         try  { 
                                 PrintWriter  pw  =  null; 
                                 if  (os  !=  null) 
                                         pw  =  new  PrintWriter(os); 
                                          
                                 InputStreamReader  isr  =  new  InputStreamReader(is); 
                                 BufferedReader  br  =  new  BufferedReader(isr); 
                                 String  line=null; 
                                 while  (  (line  =  br.readLine())  !=  null)  { 
                                         if  (pw  !=  null) 
                                                 pw.println(line); 
                                         System.out.println(type  +  ">"  +  line);         
                                 } 
                                 if  (pw  !=  null) 
                                         pw.flush(); 
                         }  catch  (IOException  ioe)  { 
                                 ioe.printStackTrace();     
                         } 
                 } 
          }
          自己mark一下

           

          posted on 2006-02-13 22:30 Titan 閱讀(420) 評論(0)  編輯  收藏 所屬分類: Java技術
          主站蜘蛛池模板: 盘锦市| 西峡县| 铜川市| 红桥区| 宜兰市| 措美县| 赤峰市| 深泽县| 仙游县| 中卫市| 乐东| 同江市| 霞浦县| 华亭县| 双城市| 安丘市| 平度市| 凤凰县| 玉溪市| 康定县| 潢川县| 都昌县| 南皮县| 黔南| 洛南县| 工布江达县| 宾川县| 冷水江市| 周宁县| 玛多县| 永胜县| 杨浦区| 甘泉县| 岳西县| 额济纳旗| 镇坪县| 中超| 义乌市| 岳阳县| 策勒县| 成安县|