0

Java swing と ffmpeg を使用してエンコーダーを開発しています。入力を指定する GUI インターフェイスを作成しました(devices, frame rate, bitrate..)ffmpeg次に、エンコードとストリーミングを呼び出します。

私の問題は、エンコーディング クラスがメイン クラスから適切に実行されているが、swing インターフェイス (具体的にはjButtonactionperformed()) から呼び出されるとブロックされることです。

誰でも私を助けることができますか?

これが私のボタンアクションです

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    Encode s = new Encode();
    s.Encode(cmdLine);
}

ここに私のエンコード方法があります

public void Encode(String cmdLine) {
    try {
        Process p2 = Runtime.getRuntime().exec(cmdLine);
        //logProcessOutputAndErrors(p2); 
    }
    catch(Exception ex) {
        ex.printStackTrace();
    }
}

Ps: Cmdline は、入力から収集するコマンドです。

4

1 に答える 1

2

まず、EncodeメソッドをRunnableクラスに変換します。

public class Encode implements Runnable {

    protected String    cmdLine;

    public Encode(String cmdLine) {
        this.cmdLine = cmdLine;
    }

    @Override
    public void run() {
        try {
            Process p2 = Runtime.getRuntime().exec(cmdLine);
            // logProcessOutputAndErrors(p2);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

次に、クラスをスレッドとしてインスタンス化し、開始します。

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    Encode s = new Encode(cmdLine);
    new Thread(s).start();
}
于 2012-12-27T15:08:39.837 に答える