Java进程的waitFor()函数导致应用程序冻结

3

在我的Java应用程序中,我有一个日志备份功能:

rt = Runtime.getRuntime();
pr = rt.exec(command);
int exitVal = pr.waitFor();

if(exitVal == 0) 
   return true

问题在于备份日志和获取响应需要一些时间,这样我的应用程序就会冻结。如果我删除pr.waitFor()函数调用,我可以得到响应,但是日志备份无法正常工作。

你要么需要等待,要么不需要。根据你的确切上下文,你可以使用某种后台线程来执行该过程,并拥有某种观察者,在该过程完成时得到通知。Swing API中的SwingWorker就是这样做的(或多或少)。 - MadProgrammer
按照这个方法尝试过了,可以正常工作。https://dev59.com/TnA75IYBdhLWcg3wFEsI#3489549 - Sameera.San
2个回答

2

waitFor() 方法会使当前线程等待,直到由该 Process 对象表示的进程终止为止。如果子进程已经终止,则该方法立即返回。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。

因此,您可以创建另一个线程来执行命令。pr = rt.exec(command);。您可能需要异步执行此任务。因为在子进程终止之前,进程将等待。


1

是的,你应该在一个单独的线程中完成这项工作。了解Runnable接口和Thread类


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接