Поймать, если произошел сбой Java-процесса - PullRequest
1 голос
/ 17 января 2012

Я запускаю процесс 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);                  
}

Но когда процесс начался, иногда особенно с большими файлами, но не всегда я получаю это сообщение Windows:

enter image description here

Это происходит только на Windows Server 2008 и не происходило на Windows 7.

У меня есть 2 вопроса:

  1. Почему происходит сбой этого процесса?
  2. Могу ли я отловить эту ошибку в Java, закрыть это окно и продолжить выполнение потока (возможно, я перезапущу этот процесс).

1 Ответ

1 голос
/ 17 января 2012

Посмотрите на возвращаемое значение из Process.waitFor () .Если процесс завершится с ошибкой, он может вернуть отдельный код ошибки (возможно, отрицательный).

См. здесь , где приведены некоторые примеры того, как на код выхода влияют сбои в различных ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...