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 閱讀(412) 評論(0)  編輯  收藏 所屬分類: Java技術
          主站蜘蛛池模板: 西昌市| 车险| 石台县| 安仁县| 武宣县| 抚州市| 哈密市| 封开县| 仁寿县| 塘沽区| 抚松县| 麻江县| 石家庄市| 桂东县| 平阴县| 松溪县| 邵武市| 高阳县| 寿阳县| 安图县| 科技| 潼关县| 即墨市| 南开区| 望城县| 阿荣旗| 麦盖提县| 廉江市| 厦门市| 滦南县| 兰考县| 莎车县| 禹城市| 酉阳| 江陵县| 丰都县| 类乌齐县| 栾川县| 郸城县| 吴川市| 瑞昌市|