首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

java Runtime Process调用可执行文件,子进程堵塞

2012-09-01 
java Runtime Process调用可执行文件,子进程阻塞我用java调用mencoder实施转码,但是转码过程中出现子进程

java Runtime Process调用可执行文件,子进程阻塞


我用java调用mencoder实施转码,但是转码过程中出现子进程阻塞,而且还是看了API才知道这个问题的。因为mencoder的控制台输出信息很多,把缓存区所有的空间占满了,所以程序不能执行后面的程序,mencoder就只能转码28秒的视频,所以需要建立线程及时清空缓存区。

新建一个类StreamGobble类:

在main函数中调用Runtime/Process执行转码

view plaincopy to clipboardprint?
  1. String?line?=?value.toString();???String[]?str?=?line.split("?");???
  2. String?fOutput?=?null;???fOutput?=?str[3]?+?".flv";???
  3. Process?process?=?null;???try?{???
  4. ????Runtime?runtime?=?Runtime.getRuntime();???????process?=?runtime?.exec("mencoder?-ofps?30000/1001?-vf?harddup"???
  5. ????????+?"?/user/student/data/"+str[0]???????????+?"?-ss?"+str[1]+"?-endpos?"+str[2]+"?-sws?2?-of?lavf?-ovc?lavc?-lavcopts?"???
  6. ????????+?"vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3?"???????????+?"-nosound?-srate?22050?-o?/user/student/data/"+fOutput);???
  7. ????new?StreamGobble(process.getInputStream(),?"INFO").start();???????new?StreamGobble(process.getErrorStream(),?"ERROR").start();???
  8. ????int?status?=?process.waitFor();???????System.out.println("Process?exitValue:?"?+?status);???
  9. ????}?catch?(Throwable?t)?{???????????t.getStackTrace();???
  10. ????}?finally?{???????????if?(process?==?null)???
  11. ????????????process.destroy();???????????process?=?null;???
  12. ????}?

热点排行