Runtime. getRuntime (). exec 실행 차단 문제 해결.

3731 단어 Runtime
다음으로 이동:http://blog.csdn.net/dysj4099/article/details/5985596
cmd 명령 이 실 행 될 때
줄 에 오류 나 경고 가 발생 했 을 때 주 제어 프로그램의 waitfor 방법 이 막 혀 계속 기 다 렸 습 니 다. 자 료 를 찾 아 보 니 Runtime. getRuntime (). exec 방법 은 스스로 처리 해 야 합 니 다.
stderr 및 stdout 흐름, 해결 방법 은 다른 thread 로 내 보 내 는 것 입 니 다.
차단 코드:
view plaincopy to clipboardprint?
01.Process p = Runtime.getRuntime().exec(cmd); 
02. 
03.p.waitFor(); 
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
해결 방법:
view plaincopy to clipboardprint?
01.Process p = Runtime.getRuntime().exec(cmd);  
02.  
03.StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");              
04.        
05.      // kick off stderr   
06.      errorGobbler.start();  
07.        
08.      StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");  
09.      // kick off stdout   
10.      outGobbler.start();   
11.  
12.p.waitFor();  
			Process p = Runtime.getRuntime().exec(cmd);
			
			StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");            
	        
	        // kick off stderr
	        errorGobbler.start();
	        
	        StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");
	        // kick off stdout
	        outGobbler.start(); 
			
			p.waitFor(); 

 

그 중에서 StreamGobbler 류 의 코드:
view plaincopy to clipboardprint?
01.package com.sdc.callmaxent.socket;  
02.  
03.import java.io.BufferedReader;  
04.import java.io.IOException;  
05.import java.io.InputStream;  
06.import java.io.InputStreamReader;  
07.import java.io.OutputStream;  
08.import java.io.PrintWriter;  
09.  
10.import com.sdc.callmaxent.util.FileUtil;  
11.  
12./** 
13. *     Runtime.getRuntime().exec           
14. * @author shaojing 
15. * 
16. */  
17.public class StreamGobbler extends Thread {  
18.    InputStream is;  
19.    String type;  
20.    OutputStream os;  
21.          
22.    StreamGobbler(InputStream is, String type) {  
23.        this(is, type, null);  
24.    }  
25.  
26.    StreamGobbler(InputStream is, String type, OutputStream redirect) {  
27.        this.is = is;  
28.        this.type = type;  
29.        this.os = redirect;  
30.    }  
31.      
32.    public void run() {  
33.        InputStreamReader isr = null;  
34.        BufferedReader br = null;  
35.        PrintWriter pw = null;  
36.        try {  
37.            if (os != null)  
38.                pw = new PrintWriter(os);  
39.                  
40.            isr = new InputStreamReader(is);  
41.            br = new BufferedReader(isr);  
42.            String line=null;  
43.            while ( (line = br.readLine()) != null) {  
44.                if (pw != null)  
45.                    pw.println(line);  
46.                System.out.println(type + ">" + line);      
47.            }  
48.              
49.            if (pw != null)  
50.                pw.flush();  
51.        } catch (IOException ioe) {  
52.            ioe.printStackTrace();    
53.        } finally{  
54.            FileUtil.close(pw);  
55.            FileUtil.close(br);  
56.            FileUtil.close(isr);  
57.        }  
58.    }  
59.}   

좋은 웹페이지 즐겨찾기