yuxianqiandi 2011-09-26 10:32
浏览 215
已采纳

新手问一个线程同步问题

//最近一两天突然想写一个可以从rar文件中提取文件的程序,具体的代码如下:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

 

public class Test {
 private static ArrayList<File> myFile = new ArrayList<File>();
 private String flag = "flag";
 private ArrayList<File> tempFile = new ArrayList<File>();
 private Process pro;

 public void rarFile(String src, String name) {// src表示当前路径,
  Pattern p = Pattern.compile(".*\\.rar$");
  Matcher m = p.matcher(name);

  if (m.matches()) {
   synchronized (this) {
    try {

     //解压文件
     pro = Runtime.getRuntime().exec(
       "cmd /c start winrar x " + src + "\\" + name
         + " -r " + "" + src);
    } catch (IOException e) {
     e.printStackTrace();
    }
             /*如何让主线程等待pro执行玩后在继续执行呢?*/
    int index = name.lastIndexOf(".");
    String fileName = name.substring(0, index);
    File ff = new File(src + "\\" + fileName);
    getFile(ff);
    tempFile.add(ff);

   }
  }
 }

  //获取文件

 public void getFile(File f) {
  // System.out.println(f);
  if (f.isDirectory()) {
   File[] list = f.listFiles();
   for (int i = 0; i < list.length; i++)
    getFile(list[i]);
  } else {
   String name = f.getName();
   String pattern = ".*\\.rar$|.*\\.pdf$";//提取pdf文件和rar文件
   Pattern p = Pattern.compile(pattern);
   Matcher m = p.matcher(name);
   if (m.matches()) {
    String str = ".*\\.pdf$";
    p = Pattern.compile(str);
    m = p.matcher(name);
    if (m.matches()) {
     myFile.add(f);

    } else {
     rarFile(f.getParent(), f.getName());
    }
   }
  }
 }

 public static void main(String[] args) {
  Test tt = new Test();
  tt.getFile(new File("f:\\test"));
  Iterator<File> it = myFile.iterator();
  while (it.hasNext())
   System.out.println(it.next());

 }

}
如何使主线程等待pro执行完毕在继续往下执行呢?参阅了网上的很多方法,还是不行...

  • 写回答

3条回答

  • _1_1_7_ 2011-09-26 10:55
    关注
        InputStream is=pro.getInputStream();
        while(is.read()!=-1);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?