Java 函数的作用是:使应用程序冻结

Java 函数的作用是:使应用程序冻结,java,exec,wait,Java,Exec,Wait,在java应用程序中,我有一个日志备份功能: rt = Runtime.getRuntime(); pr = rt.exec(command); int exitVal = pr.waitFor(); if(exitVal == 0) return true 问题是备份日志和获得响应需要一段时间,直到我的应用程序冻结。如果我删除pr.waitFor()函数调用,我会得到一个响应,但日志备份无法工作 是的,您应该在单独的线程中完成这项工作。阅读有关Runnable接口和线程类的内容wa

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

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

if(exitVal == 0) 
   return true

问题是备份日志和获得响应需要一段时间,直到我的应用程序冻结。如果我删除
pr.waitFor()
函数调用,我会得到一个响应,但日志备份无法工作

是的,您应该在单独的线程中完成这项工作。阅读有关Runnable接口和线程类的内容

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


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

要么需要等待,要么不等待。根据具体的上下文,您可以使用某种后台线程在中执行进程,并拥有某种观察者,在进程完成时会收到通知<来自Swing API的code>SwingWorker会根据这一点(或多或少)尝试这一点,并且会起作用。