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 阅读(399) 评论(0)  编辑  收藏 所属分类: Java技术

只有注册用户登录后才能发表评论。


网站导航: