在我关闭程序之前,进程暂停

时间:2017-05-26 21:07:24

标签: java swing ffmpeg

我为它制作了一个简单的程序和UI。 它有一个按钮,用于启动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 提出的旧问题对我的问题没有答案(解决方案)

1 个答案:

答案 0 :(得分:2)

您的Process屏蔽event dispatch thread。相反,请在ProcessBuilder的后台运行SwingWorker,如完整example所示。

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

请注意,该示例会调用redirectErrorStream(true),因此您应该能够看到来自ffmpeg.exe的任何错误或提示。