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

}

然后,将类实例化为 Thread,并启动它。

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