Java 启动一个外部程序后如何在与其交互的同时,又能阻塞主线程呢?

2016-09-15 20:07:02 +08:00
 XhstormR
private static void mergeFLV() throws IOException, InterruptedException {
    String string = "cmd.exe /C start D:/Download/ffmpeg.exe -f concat -i D:/Download/123.txt -c copy D:/Download/test.flv";
    Process exec = Runtime.getRuntime().exec(string);
    exec.waitFor();
    System.out.println("OK!!!");
}

如果是 cmd.exe /C start ,可以显示 ffmpeg.exe ,但 cmd.exe 直接关闭了,就直接打印 OK 了。

如果是 cmd.exe /K start ,可以显示 ffmpeg.exe ,但关闭 ffmpeg.exe 后, cmd.exe 没有关闭,在后台一直留着,就一直阻塞着。

最好的是 cmd.exe /C,不显示 ffmpeg.exe 的窗口,在任务管理器关掉 ffmpeg 后, cmd.exe 也直接关闭了,就打印 OK 了。就是不知道怎么显示 ffmpeg.exe 的窗口与其交互。

搞了一下午了,就想造个轮子,解析+下载+合并 bilibili 的超清视频,就差最后一步了, 555555

1811 次点击
所在节点    问与答
7 条回复
oott123
2016-09-15 20:36:05 +08:00
为啥要 cmd 呢?
直接启动 ffmpeg.exe 不就好了……
XhstormR
2016-09-15 20:48:39 +08:00
@oott123 刚试了下,可以运行,但是不会显示 ffmpeg.exe 的窗口,怎么才能显示 ffmpeg.exe 的窗口啊。
oott123
2016-09-15 21:00:43 +08:00
http://stackoverflow.com/questions/8149828/read-the-output-from-java-exec

试试这个。我理解其实你不一定要窗口出来,拿到输出就可以了。
SoloCompany
2016-09-15 21:47:04 +08:00
去掉 start
XhstormR
2016-09-15 22:19:46 +08:00
@SoloCompany 去掉 start ,就没有 ffmpeg.exe 的窗口了。
SoloCompany
2016-09-15 22:23:48 +08:00
@XhstormR 那就 start /w 或 start /wait
XhstormR
2016-09-15 22:30:13 +08:00
@SoloCompany 感谢,有效果,加个 /w 就好了,我晕啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/306480

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX