【发布时间】:2011-07-19 02:44:28
【问题描述】:
为什么我在进程终止后得到进程的输出?我需要在进程运行时而不是在进程终止后获取进程输出“实时”。我想运行一个像 jboss 这样的进程,它正在登录标准输出,所以我需要及时的信息,而不是在进程终止之后。谢谢你的回答。
这是我的代码:
try {
process = processBuilder.start();
processOutput = process.getOutputStream();
processInput = process.getInputStream();
processReader = new BufferedReader(new InputStreamReader(
processInput));
processWriter = new BufferedWriter(new OutputStreamWriter(
processOutput));
while ((line = processReader.readLine()) != null) {
System.out.println(line);
}
processReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
扩展名:
所以我想通过一个带有按钮的 Eclipse 插件运行一个外部程序。当我单击按钮时,程序启动并且外部程序的输出将返回到控制台。当我单击停止时,程序停止。所以这就是我如何制作流程构建器的实例。我做了一个示例类来测试流程构建器,而无需在每次修改时启动整个插件项目。
这是我实现 Runnable 的流程构建器实例:
@Override
public void run() {
List<String> command = new ArrayList<String>();
command.add(serverPath);
command.add(String.valueOf(count));
command.add(filePath);
processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
try {
process = processBuilder.start();
processOutput = process.getOutputStream();
processInput = process.getInputStream();
processReader = new BufferedReader(new InputStreamReader(
processInput));
processWriter = new BufferedWriter(new OutputStreamWriter(
processOutput));
System.out.println(process.waitFor());
while ((line = processReader.readLine()) != null) {
System.out.println(line);
}
processReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
参数来自构造函数。这是实例化:
public static void main(String[] args) throws Exception
{
SimulationProcess smp = new SimulationProcess(count, "file",
"program_name");
smp.run();
}
【问题讨论】:
标签: java process live execution