如何与 Runtime.getRuntime().exec(command) 程序进行交互?

Posted

技术标签:

【中文标题】如何与 Runtime.getRuntime().exec(command) 程序进行交互?【英文标题】:How can I interact with Runtime.getRuntime().exec(command) programs? 【发布时间】:2015-04-27 09:59:33 【问题描述】:

我正在使用 Runtime.getRuntime().exec(command) 从控制台执行一些程序。

如果程序是有限的(只完成一些任务并输出信息然后关闭)一切都很好。我可以执行程序,然后我的 java 程序继续运行。

我的问题是程序直到某些用户输入才完成。那我不知道怎么和它交互。

例如,我在 java 中有一个名为 a.jar 的程序,其主要代码如下:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = "";

   while (line.equals("q") == false) 
       line = in.readLine();
    

现在如果我想从另一个 java 程序运行它

   Process p = Runtime.getRuntime().exec("java -jar q.jar");
   System.out.println("Program terminated");

它永远不会显示程序终止消息。有什么建议可以解决这个问题吗?

我希望我已经解释了自己,谢谢

【问题讨论】:

【参考方案1】:

使用下面的语句(waitFor方法)完成命令执行。

  p.waitFor();
  System.out.println("Program terminated");

【讨论】:

然后 p.waitFor();将永远等待并且不会显示消息....因为 a.jar 永远不会获得“q”输入。 如果你使用的是Java 8,你可以直接使用waitfor和Timeout。 p.waitFor(1, TimeUnit.MINUTE) 太好了!谢谢。但这仍然不是我想要的。我想在我想停下来的时候停下来。我想以某种方式输入 q 字符,以便程序自行终止。 另一种方式是你可以设置线程的超时时间。这个链接可能会帮助你。 ***.com/questions/808276/… 再次感谢,但我仍然无法关闭进程。我的项目使用媒体播放器播放 youtube 视频,但我无法停止。

以上是关于如何与 Runtime.getRuntime().exec(command) 程序进行交互?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Android 代码更改分辨率(大小)和密度,Runtime.getRuntime().exec(...) 不起作用

Runtime.getRuntime().exec如何执行多行命令,坐等方法

System.gc()和Runtime.getRuntime().gc()区别

runtime.getruntime.exec 无法识别可执行文件

Runtime.getRuntime().addShutdownHook()

Android Runtime.getRuntime().exec