1 4 package com.tc; 5 6 import com.tc.admin.common.InputStreamDrainer; 7 8 public class ProcessWaiter extends Thread { 9 private Process m_process; 10 private Runnable m_waiter; 11 private InputStreamDrainer m_outReader; 12 private InputStreamDrainer m_errReader; 13 14 public ProcessWaiter(Process process, Runnable waiter) { 15 super(); 16 17 if(process == null) 18 throw new IllegalArgumentException ("process is null"); 19 20 m_process = process; 21 m_waiter = waiter; 22 } 23 24 public ProcessWaiter(Process process) { 25 this(process, null); 26 } 27 28 public void start(Runnable waiter) { 29 m_waiter = waiter; 30 start(); 31 } 32 33 public void run() { 34 m_outReader = new InputStreamDrainer(m_process.getInputStream()); 35 m_errReader = new InputStreamDrainer(m_process.getErrorStream()); 36 37 m_outReader.start(); 38 m_errReader.start(); 39 40 while(true) { 41 try { 42 if(m_outReader.isAlive()) { 43 m_outReader.join(); 44 } 45 if(m_errReader.isAlive()) { 46 m_errReader.join(); 47 } 48 break; 49 } catch(InterruptedException ie) {} 50 51 try {sleep(1000);} catch(InterruptedException ie) {} 52 } 53 54 if(m_waiter != null) { 55 m_waiter.run(); 56 } 57 } 58 59 public Process getProcess() { 60 return m_process; 61 62 } 63 64 public String getOutputBuffer() { 65 return m_outReader.getBufferContent(); 66 } 67 68 public String getErrorBuffer() { 69 return m_errReader != null ? m_errReader.getBufferContent() : null; 70 } 71 } 72 | Popular Tags |