使用java与控制台应用程序交互

时间:2013-07-29 02:23:13

标签: java macos console command

我想用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”的相同程序工作得很好。 请帮忙!

1 个答案:

答案 0 :(得分:0)

一方面我会说问题是p。* 等待 * For() 究竟什么对象以及何时使用notify()或notifyAll()调用来唤醒对象线程将类似于stdout并且可能是进程的重组。 注意:一个有趣的特性是BufferedReader中的类字段叫做“lock”,api文档确实提到了构建程序的一些方法,以便通知它。