process.waitFor()做了些什么事

fyanyan520 2007-05-28 03:04:22
在JAVA里需要依次安装两个WINDOWS可执行程序.采用的方法是:
Thread thr = new Thread() {
public void run() {
try {
String[] cmd = {savePath};
Process proc = java.lang.Runtime.getRuntime().
exec(cmd);
proc.waitFor(); //等待执行完第一个程序

cmd = {savePath2};//开始执行第二个程序
proc = java.lang.Runtime.getRuntime().
exec(cmd);
proc.waitFor();


} catch (Exception ex) {
....
}

}
};
thr.start();

现在发现的问题是,这两个进程在执行的过程中,衔接得并不紧密,即当第一个程序执行完后(即当第一个执行程序的画面点击"完成"按钮),第二个程序的安装画面要很久才弹出来.请问这是什么原因呢.我试着把第二个执行程序换成了显示一个已生成好的对话框,速度同样很慢.所以想知道proc.waitFor()到底做了些什么事.
能不能一点"完成"按钮,立即弹出第二个程序的安装界面?
...全文
1333 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
waitgod 2008-04-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hmsuccess 的回复:]
它成功的停止了代码继续执行,同时它也阻塞了子进程的执行,因为子进程在测试的时候需要及时汇报信息和错误信息
[/Quote]
wanglixue 2008-04-30
  • 打赏
  • 举报
回复
proc 这个进程在调用waitFor的时候,实际上是开辟了一个新的线程(子线程)来处理任务,主线程处于阻塞状态,直到子线程执行完毕!
当子线程的输入或者输出流满的时候,是不能够自动清空的,需要认为的去清空,所以我们一般要增加一个线程,用来专门的清空输入流

在另一个线程中来读输入流:
BufferedReader br = new BufferedReader(process.getInputStream());
while(br.readLine()!=null);
cl55 2008-04-27
  • 打赏
  • 举报
回复
这就和c里用的fork一样,fork 出一个child process后,parent process等child 运行结束后再继续。
hmsuccess 2008-04-25
  • 打赏
  • 举报
回复
它成功的停止了代码继续执行,同时它也阻塞了子进程的执行,因为子进程在测试的时候需要及时汇报信息和错误信息

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧