我已经在java中编写了一个脚本,我正在执行.exe文件来安装应用程序之后我将通过安装生成的文件复制到远程位置。但问题是在安装完成之前,下一步将文件复制粘贴到机器位置。因此导致粘贴空文件,因为安装没有完成,所以文件就在那里。如何在上一步结束之前停止我的流程。我尝试使用thread.sleep(10000),但这没有帮助,因为安装时间可能会有所不同。
public class threadJoin {
public static void main(String s[]){
Runnable r = new Runnable() {
@Override
public void run() {
File f = new File("C:\\D\\EVProject\\");
FilenameFilter textFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.startsWith("EVProject");
}
};
File[] files = f.listFiles(textFilter);
for (File file : files) {
try {
String filexy = file.getCanonicalPath();
System.out.print(filexy);
Runtime.getRuntime().exec(filexy);
//Thread.sleep(10000);
} catch (IOException ex) {
Logger.getLogger(threadJoin.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
String l ="C:\\Program Files\\PD ";
String m = "C:\\0.0.9.8";
File srcDir = new File(l);
File destDir = new File(m);
try {
FileUtils.copyDirectory(srcDir, destDir);
} catch (IOException e) {
}
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
};
Thread t1= new Thread(r);
Thread t2 = new Thread(r2);
t1.start();
try{
t1.join();
}catch(InterruptedException e){
}
t2.start();
}
}
答案 0 :(得分:1)
Runtime.exec返回一个Process句柄。您可以使用此Process句柄等待进程结束。句柄还可以为您提供一个int值,表明该过程是否成功,但这需要您进行测试,因为它可能会因实施而有所不同。
在您的情况下 - 请尝试以下
处理myP = Runtime.getRuntime()。exec(filexy);
int isTrue = myP.waitFor();
看看它是否有帮助。
答案 1 :(得分:0)
也许yuu可以使用联接方法join(),如下所示:
Runnable task1 = () -> {
for (int i = 0 ; i < 5 ; i++) {
System.out.println("task1..." + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
};
Runnable task2 = () -> {
for (int i = 0 ; i < 5 ; i++) {
System.out.println("task2..." + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
};
Thread th1 = new Thread(task1);
Thread th2 = new Thread(task2);
th1.start();
try {
th1.join();
} catch (InterruptedException e) {}
th2.start();