view dbus-d-javahelper/jsrc/dbus_d_javahelper/ConsoleProcess.java @ 0:a5576806d36d

recreate repository without any libs for lightweight repository
author Frank Benoit <benoit@tionex.de>
date Sat, 20 Oct 2007 18:07:18 +0200
parents
children
line wrap: on
line source

/*
 * License: Public Domain
 * written by Frank Benoit
 */
package dbus_d_javahelper;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class ConsoleProcess {
	
	private final Thread threadStdout;
	private final Thread threadStderr;
	private final Process process;

	private class StreamPump extends Thread {

		private final InputStream istr;
		private final OutputStream ostr;

		public StreamPump(InputStream istr, OutputStream ostr) {
			this.istr = istr;
			this.ostr = ostr;
		}

		public void run() {
			BufferedReader inputStream = new BufferedReader(
					new InputStreamReader(istr));
			PrintWriter writer = new PrintWriter(new OutputStreamWriter(ostr));
			String c;
			try {
				while ((c = inputStream.readLine()) != null) {
					writer.println(c);
					writer.flush();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public ConsoleProcess( String[] cmdarray, String[] envp, File basedir, OutputStream stdout, OutputStream stderr ) throws IOException{
	      process = Runtime.getRuntime().exec( cmdarray, envp, basedir );
	      threadStdout = new StreamPump( process.getInputStream(), stdout ); 
	      threadStderr = new StreamPump( process.getErrorStream(), stderr ); 
	      
	      threadStdout.start();
	      threadStderr.start();
	}
	
	public int join() throws InterruptedException{
		process.waitFor();
		threadStdout.join();
		threadStderr.join();
		return process.exitValue();
	}

	public void interrupt() {
		process.destroy();
	}
}