2013-07-29 72 views
0

我想用java打開一個外部應用程序。使用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

您正在將stderr定義爲輸入流並將p.getInptStream分配給stdout。 – Guanxi

+0

@關西糾正了它,那可能是複製粘貼錯誤,謝謝指出它 – kausar

回答

0

的手,我會說,問題是第* 等待 *爲() 究竟是什麼物體以及何時USEE通知()或notifyAll的()調用來喚醒對象的線程會是這樣的標準輸出,也許是流程的重組。 注意:一個有趣的功能是BufferedReader中稱爲「lock」的類字段,api文檔提到了一些構建程序的方法,以便通知它。

相關問題