我想用java打开外部应用程序。
Process p = Runtime.getRuntime().exec("/Users/kausar/myApp");
这会运行我在活动监视器中看到的过程。 现在我运行的文件实际上是控制台应用程序,然后它接受命令并根据这些命令给出响应。 例如,如果我去终端并放置相同的
Kausars-MacBook-Air:~ kausar$ /Users/kausar/myApp
myApp>
现在我可以向app发出命令,例如
myApp> SHOW 'Hi There'
这些是在控制台应用程序中作为键盘输入的命令,这些命令不是参数。我已经看到了不同的参数方法。我也试过以下但是无法让它发挥作用。
String res;
String cmnd = "SHOW \'Hi There\'";
OutputStream stdin = null;
InputStream stdout = null;
stdout = p.getInputStream();
stdin = p.getOutputStream();
stdin.write(cmnd.getBytes());
stdin.flush();
p.waitFor();
BufferedReader input = new BufferedReader(
new InputStreamReader(stdout));
while ((res = input.readLine()) != null) {
System.out.println(res)
}
input.close();
p.destroy();
它显示什么,而“/ bin / bash -c ls”的相同程序工作得很好。 请帮忙!
答案 0 :(得分:0)
一方面我会说问题是p。* 等待 * For() 究竟什么对象以及何时使用notify()或notifyAll()调用来唤醒对象线程将类似于stdout并且可能是进程的重组。 注意:一个有趣的特性是BufferedReader中的类字段叫做“lock”,api文档确实提到了构建程序的一些方法,以便通知它。