2017-05-26 28 views
1

我爲它做了一個簡單的程序和用戶界面。 它有開始ffmpeg.exe解碼視頻的一個按鈕:進程正在暫停,直到我關閉程序

button.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      ProcessBuilder pb = new ProcessBuilder("D:\\ffmpeg.exe", "-i", "\"D:\\video\\input.mp4\"", "\"output.mp4\""); 
      try { 
       Process p = pb.start(); 
      } catch (IOException error) { 
       // 
      } 
     } 
    } 

的問題是,點擊按鈕的ffmpeg開始後,但它不會做任何事情(在任務管理器不使用的CPU - 0%),直到我關閉程序(UI),然後ffmpeg的過程中只啓動關閉程序的ffmpeg後,解碼視頻(使用CPU開始 - 例如24%)

這不是重複:舊的問題,通過建議Andy Thomas對我的問題沒有答案(解答)

+0

在cmd中運行命令是否有效? '''D:\\ ffmpeg.exe -i D:\\ video \\ input.mp4 \\ output.mp4 \\''' –

+0

它看起來像是一個輸出路徑錯誤我已經 –

+0

@FahadSiddiqui沒有這樣的錯誤,抱歉。正如我已經說過的那樣,但只有當我關閉該程序 – user924

回答

2

您的Process會阻止event dispatch thread。相反,在SwingWorker的背景下運行您的ProcessBuilder,如完整的example所示。

@Override 
    protected Integer doInBackground() { 
     try { 
      ProcessBuilder pb = new ProcessBuilder(
       "D:\\ffmpeg.exe", "-i", "\"D:\\video\\input.mp4\"", "\"output.mp4\"")); 
     … 
    } 

注意,例如調用redirectErrorStream(true),所以你應該能夠看到任何錯誤或ffmpeg.exe提示。

+1

這是真棒,謝謝:) – user924