2013-07-29 5 views
0

Je veux ouvrir une application externe en utilisant java.interagir avec l'application console en utilisant java

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

Ceci exécute le processus comme je peux le voir dans le moniteur d'activité. Maintenant, le fichier que je lance est en fait une application console qui prend ensuite des commandes et donne une réponse basée sur ces commandes. par exemple, si je vais à la borne et mettre la même

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

Maintenant, je peux donner des commandes à l'application comme par exemple

myApp> SHOW 'Hi There' 

Ce sont des commandes prises en entrée du clavier dans l'application de la console, ce sont pas de paramètres. J'ai vu différentes approches avec des paramètres. J'ai essayé le suivant aussi mais je ne pouvais pas le faire fonctionner.

 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(); 

Son affichage rien alors que la même procédure avec "/ bin/bash -c ls" fonctionne très bien. aidez s'il vous plaît!

+0

Vous définissez stderr comme flux d'entrée et attribuez p.getInptStream à stdout. – Guanxi

+0

@Guanxi corrigé, ce fut probablement erreur de pâte de copie, merci de le signaler – kausar

Répondre

0

de la main, je dirais que le problème est avec p. * attendre * Pour() exactement quel objet et quand USEE notify() ou notifyAll() pour réveiller le fil d'objet serait quelque chose comme sur stdout et peut-être une restructuration du processus. note: une fonctionnalité intéressante est le champ de classe dans BufferedReader appelé "lock", les doc api mentionnent un moyen de structurer votre programme afin qu'il puisse être notifié.

Questions connexes