Java调用外部程序
2009-06-04 14:22
399 查看
Java web开发调用外部ffmpeg或mencoder转码...
遇到的问题是ffmpeg或mencoder进程阻塞, 需要停掉tomcat--javaw.exe进程之后才能执行ffmpeg.exe或mencoder.exe
问题的原因: getErrorStream 和 getInputStream 缓冲区没有清空
解决的方法: 同时清空getErrorStream 和 getInputStream 的缓冲区
代码如下:
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process process = builder.start();
final InputStream is1 = process.getInputStream();
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(is1));
try {
while(br.readLine() != null) ;
} catch (IOException e) {
e.printStackTrace();
}
}
}).start(); // 启动单独的线程来清空process.getInputStream()的缓冲区
InputStream is2 = process.getErrorStream();
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
StringBuilder buf = new StringBuilder(); // 保存输出结果流
String line = null;
while((line = br2.readLine()) != null) buf.append(line); 本文出自 “wIsper 把技术做成艺术” 博客,转载请与作者联系!
遇到的问题是ffmpeg或mencoder进程阻塞, 需要停掉tomcat--javaw.exe进程之后才能执行ffmpeg.exe或mencoder.exe
问题的原因: getErrorStream 和 getInputStream 缓冲区没有清空
解决的方法: 同时清空getErrorStream 和 getInputStream 的缓冲区
代码如下:
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process process = builder.start();
final InputStream is1 = process.getInputStream();
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(is1));
try {
while(br.readLine() != null) ;
} catch (IOException e) {
e.printStackTrace();
}
}
}).start(); // 启动单独的线程来清空process.getInputStream()的缓冲区
InputStream is2 = process.getErrorStream();
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
StringBuilder buf = new StringBuilder(); // 保存输出结果流
String line = null;
while((line = br2.readLine()) != null) buf.append(line); 本文出自 “wIsper 把技术做成艺术” 博客,转载请与作者联系!
相关文章推荐
- JAVA调用外部程序错误
- java调用外部exe程序并传参
- Java调用外部程序的方法
- java程序调用exe文件和调用自己打的jar包或其他外部jar包
- Java调用外部程序技巧
- Java调用外部程序解决方案
- java如何调用外部程序
- Java调用外部程序技巧
- java调用外部程序挂起原因
- Java调用外部程序
- Java进程Runtime、Process、ProcessBuilder调用外部程序
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- java进程调用外部程序时fork()+exec()分析
- oracle 调用外部java程序代码
- Java调用外部程序命令
- oracle如何使用java source调用外部程序
- Java调用外部程序命令时线程阻塞问题分析
- 技术-Java程序调用外部程序获取输出
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- Java借助Runtime调用外部程序阻塞的代码