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 閱讀(413) 評論(0)  編輯  收藏 所屬分類: Java技術
          主站蜘蛛池模板: 浦县| 余干县| 基隆市| 昆山市| 建湖县| 甘孜县| 舟山市| 梧州市| 罗平县| 上虞市| 烟台市| 孙吴县| 安义县| 阜新市| 大悟县| 偃师市| 旌德县| 沂水县| 郸城县| 禹城市| 龙井市| 望都县| 甘肃省| 辉县市| 观塘区| 古丈县| 崇礼县| 谷城县| 平遥县| 沾化县| 陵川县| 政和县| 竹山县| 昂仁县| 保亭| 高阳县| 井陉县| 房山区| 阜新市| 辽宁省| 绥棱县|