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() 呼び出しのようになります。処理する。注: 興味深い機能は、「ロック」と呼ばれる BufferedReader のクラス フィールドです。API ドキュメントには、通知できるようにプログラムを構造化する方法が記載されています。

于 2013-07-29T05:22:37.263 に答える