我的 Java 命令进程生成器永远不会退出

问题描述 投票:0回答:1

我正在尝试在我的java程序中运行一个命令,该命令允许我使用外部软件ffmpeg从视频文件中提取字幕。

在我的 cmd 上,该命令工作正常,但是当我从流程构建器从 IDE 运行它时,它会执行但永远不会完成。

只有当我停止我的应用程序时,字幕文件才会出现在指定的文件夹中,这意味着命令正确执行但永远不会停止。

有人可以帮忙吗?

由 DeepL.com 翻译(免费版)

这里有一些代码来说明我的意思

List<String> command = new ArrayList<>();
        command.add("ffmpeg");
        command.add("-i");
        command.add(fileName);
        command.add("-c:s");
        command.add("srt");
        command.add(subfile);

        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command(command);

processBuilder.directory(new File(UPLOAD_MOVIE_DIR_disc + movie.getTitle() ));

processConvert.waitFor(); //never finish 

当我得到答案时,我不得不在它旁边使用一个新线程,这会在一段时间后停止进程执行,但这不适合应用程序。

java processbuilder
1个回答
0
投票

您的代码问题与您处理流程输出流的方式有关。默认情况下,

ProcessBuilder
使用管道进行通信,如果流未耗尽,这可能会导致
waitFor()
方法无限期挂起。

您可以通过重定向标准错误或使用流程流来修复代码

© www.soinside.com 2019 - 2024. All rights reserved.