在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()到底做了些什么事.
能不能一点"完成"按钮,立即弹出第二个程序的安装界面?

解决方案 »

  1.   

    这就和c里用的fork一样,fork 出一个child process后,parent process等child 运行结束后再继续。
      

  2.   

    proc 这个进程在调用waitFor的时候,实际上是开辟了一个新的线程(子线程)来处理任务,主线程处于阻塞状态,直到子线程执行完毕!
    当子线程的输入或者输出流满的时候,是不能够自动清空的,需要认为的去清空,所以我们一般要增加一个线程,用来专门的清空输入流在另一个线程中来读输入流:
    BufferedReader   br   =   new   BufferedReader(process.getInputStream()); 
    while(br.readLine()!=null);