天天看點

Java調用外部程式

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);

繼續閱讀