swing GUI中被阻塞的外部进程



我正在使用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是我从输入

收集的命令

首先,将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();
}

相关内容

  • 没有找到相关文章

最新更新