【问题标题】:Java process waitFor() function causes application to freezeJava 进程 waitFor() 函数导致应用程序冻结
【发布时间】:2017-09-16 13:27:33
【问题描述】:

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

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

if(exitVal == 0) 
   return true

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

【问题讨论】:

  • 要么需要等待,要么不需要。根据您的确切上下文,您可以使用某种后台线程来执行进程,并让某种观察者在进程完成时收到通知。 Swing API 中的SwingWorker(或多或少)会这样做
  • 按照这个试过了,效果很好。 stackoverflow.com/questions/3489543/…

标签: java exec wait


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    所以你可以创建另一个执行命令的线程。 pr = rt.exec(命令); .您可能必须异步执行此任务。因为直到子进程被终止进程才会等待。

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 2015-05-09
      相关资源
      最近更新 更多