2017-05-26 23 views
1

シンプルなプログラムとUIを作成しました。 これは、ビデオのデコードにffmpeg.exeを開始するための一つのボタンがあります。それは何もしないボタンのffmpegの開始をクリックした後が、(タスクマネージャでは、CPUがプログラムを終了するまでプロセスが一時停止中

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) { 
       // 
      } 
     } 
    } 

問題がある使用していないことを - 0%)私はプログラム(UI)を閉じ、ffmpegのプロセスのみがプログラムのffmpegを閉じた後(ビデオのデコードを開始するまでのCPU使用を開始する - それはを複製していない

例えば24%):によって提案された古い質問Andy Thomasに私の問題の答え(解決策)がありません

+0

cmdでコマンドを実行することはできますか? '' 'D:\\ ffmpeg.exe -i D:\\ビデオ\\ input.mp4 \\ output.mp4 \' '' –

+0

すでに出力パスのエラーが表示されています –

+0

@FahadSiddiquiそのようなものはありませんエラー、申し訳ありません。私がすでに言ったように、プログラムを終了したときだけ動作します。 – user924

答えて

2

Processevent dispatch threadをブロックします。代わりに、この完全なexampleに示すようにSwingWorkerの背景にProcessBuilderを実行します。

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

あなたがffmpeg.exeからエラーやプロンプトが表示されるはずですので、例では、redirectErrorStream(true)を呼び出すことに注意してください。

+1

これは素晴らしいです、ありがとう:) – user924

関連する問題