0

我想使用 java 打开一个外部应用程序。

    Process p = Runtime.getRuntime().exec("/Users/kausar/myApp");

正如我在活动监视器中看到的那样,这将运行该过程。现在我运行的文件实际上是控制台应用程序,它接收命令并根据这些命令给出响应。例如,如果我去终端并输入相同的

    Kausars-MacBook-Air:~ kausar$ /Users/kausar/myApp
    myApp>

现在我可以向应用程序发出命令,例如

    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”的相同过程可以正常工作。请帮忙!

4

1 回答 1

0

我会说问题出在 p.* wait *For() 究竟是什么对象以及何时使用 notify() 或 notifyAll() 调用来唤醒对象线程将类似于 stdout 上的内容,并且可能是对过程。注意:一个有趣的特性是 BufferedReader 中名为“lock”的类字段,api 文档确实提到了一些结构化程序的方法,以便可以通知它。

于 2013-07-29T05:22:37.263 回答