問題描述
使用Procees+Runtime操作ffmpeg時,執行比較大的文件操作會卡死,但cmd打開ffmpeg能正常執行
問題原因
因為waitfor()操作時wait但沒有指定時間,導致jvm緩沖流滿了,卡死
處理
/**
* 處理process輸出流和錯誤流,防止進程阻塞
* 在process.waitFor();前調用
* @param process
*/
private static void dealStream(Process process) {
if (process == null) {
return;
}
// 處理InputStream的線程
new Thread() {
@Override
public void run() {
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
try {
while ((line = in.readLine()) != null) {
// logger.info("output: " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
// 處理ErrorStream的線程
new Thread() {
@Override
public void run() {
BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = null;
try {
while ((line = err.readLine()) != null) {
// logger.info("err: " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
err.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}