如果Java进程崩溃,请捕获

时间:2012-01-17 06:22:13

标签: java process crash ffmpeg

我运行java进程使用ffmpeg.exe转换视频。

Runtime rt = Runtime.getRuntime();
String cmd = FFMPEGFULLPATH + " -y -i " + '"' + mpeg4File + '"' + " -vcodec libx264 -vsync 2 " + '"' + H264file + '"';

Process pr = rt.exec(cmd);

ThreadedTranscoderIO errorHandler = new ThreadedTranscoderIO(pr.getErrorStream(), "Error Stream");
errorHandler.start();
ThreadedTranscoderIO inputHandler = new ThreadedTranscoderIO(pr.getInputStream(), "Output Stream");
inputHandler.start();

try {
      pr.waitFor();
} catch (InterruptedException e) {
      LiveApplication.logger.info("Some shit happens during convertation 2 ");
      throw new IOException("UseTranscoderBlocking - Run_FFMPEG - process interrupted " + e);                  
}

但是当进程开始时,有时尤其是大文件,但并不总是得到这个窗口消息:

enter image description here

这仅在Windows Server 2008上发生,而在Windows 7上没有发生。

我有两个问题:

  1. 为什么这个过程会失败?
  2. 我可以在Java中捕获这个失败,关闭 这个窗口并继续执行线程(也许我会重新启动它 proccess)。

1 个答案:

答案 0 :(得分:1)

查看Process.waitFor()的返回值。如果进程崩溃,则可能返回不同的错误代码(可能为负数)。

有关退出代码如何受到不同操作系统崩溃影响的一些示例,请参阅here