我在Eclipse中编写了一个java代码,我正在开发一个在工作台上嵌入按钮的插件。单击此按钮时,将打开批处理文件(位于c:/program file/prism 4.0/bin
)
代码成功打开.bat文件!但我的下一个任务是在我的控制台上写下该批处理文件的输出。我正在使用Eclipse IDE版本3。
我的代码是
MessageConsoleStream out = myConsole.newMessageStream();
out.println("We are on console ! \n Shubham performed action");
try {
ProcessBuilder pb=new ProcessBuilder("C:\\Program Files\\prism-4.0\\bin\\prism.bat");
pb.directory(new File("C:\\Program Files\\prism-4.0\\bin"));
Process p=pb.start();
int exitVal=p.waitFor();
out.println("Exited with error code "+exitVal+" shown and action performed \n");
out.println("Shubham Process Successful");
out.println("Printing on console");
}
catch (Exception e)
{
out.println(e.toString());
e.printStackTrace();
}
}
答案 0 :(得分:0)
这样做:
.....
Process p = pb.start();
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String in;
while((in = input.readLine()) != null) {
out.println(in);
}
int exitVal = p.waitFor();
.....
请注意,如果批处理文件写入标准错误,则java程序必须使用它,否则p.waitFor()
将永远不会返回。
答案 1 :(得分:0)
帮自己一个大忙,查看http://commons.apache.org/exec/。它将处理关于managnig外部进程的所有可怕细节:超时,处理输入/输出,甚至创建命令行将更容易且更不容易出错
答案 2 :(得分:0)
请注意,要正确读取Process的InputStream,您应该在单独的Threads上执行此操作。请参阅this similar question。