问题:在Java中使用Runtime.getRuntime().exec()启动一个进程,发现该进程成功启动,但无法获得该进程的打印输出,网上浏览一番,发现一方案,经验证可行,整理一下贴出来备忘。
/*
*Main
*/
public class StreamOutputTest{
public static void main(String[] args)
{
try
{
Runtime runtime = Runtime.getRuntime();
final Process process = runtime.exec(property.get("snetfullpath").toString());
StreamHandler errorStreamHandler = new StreamHandler(process.getErrorStream(), "ERROR");
errorStreamHandler.start();
StreamHandler outputStreamHandler = new StreamHandler(process.getInputStream(), "STDOUT");
outputStreamHandler.start();
}
catch (IOException ex)
{
Logger.getLogger(StreamOutputTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/*
*StreamHandler class
*/
public class StreamHandler extends Thread
{
InputStream m_inputStream;
String m_type;
public StreamHandler(InputStream is, String type)
{
this.m_inputStream = is;
this.m_type = type;
}
@Override
public void run()
{
InputStreamReader isr = null;
BufferedReader br = null;
try
{
//设置编码方式,否则输出中文时容易乱码
isr = new InputStreamReader(m_inputStream, "GBK");
br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
{
System.out.println("PRINT > " + m_type + " : " + line);
}
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
finally
{
try
{
br.close();
isr.close();
}
catch (IOException ex)
{
Logger.getLogger(StreamHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}