Comment tuyau d'entrée d'un programme en Java avec bash

Mon programme Java est à l'écoute sur l'entrée standard:

InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
while(true){
    try {
        String inputStr = null;
        if((inputStr=bufReader.readLine()) != null) {
            ...
        }
        else {
            System.out.println("inputStr is null");
        }
    }
    catch (Exception e) {
        ...
    }
}

Maintenant, je veux de la pipe d'entrée de ce programme à partir de bash. J'ai essayé le suivant:

echo "hi" | java -classpath ../src test.TestProgram

Mais c'est juste l'impression de inputStr is null un nombre infini de fois. Ce que je fais mal?

Edit 1: mise à Jour de question pour inclure plus de code /contexte.


Edit 2:

On dirait que je suis en train de vivre la même question que cette OP: Ligne de commande de la Pipe d'Entrée en Java

Comment puis-je corriger le programme pour que je puisse tuyau d'entrée pour les essais, mais l'exécution du programme permettra aux utilisateurs d'entrée sur l'entrée standard ainsi?

  • Cela devrait fonctionner. Est que votre programme?
  • Votre code a fonctionné parfaitement pour moi. Que faites-vous dans votre non-affiché le code?
  • Aucune chance que le test.TestProgram vous êtes en cours d'exécution n'est pas celui que vous êtes à la compilation?
  • J'utilise Scanner au lieu de BufferedReader - je doute que cela ferait une différence.
  • si le fragment est exacte, à l'aide du Scanner ne fera aucune différence.
  • Je viens de tester votre programme avec votre code, mais Il est tout à fait correcte
  • J'ai mis à jour la question d'inclure plus de code. Je suppose que la simplification n'était pas une bonne idée dans ce cas.
  • Oh, ce que vous avez posté à l'origine n'est pas votre programme complet. Le while boucle fait une énorme différence.
  • Ouais, il n'était pas. Désolé à ce sujet!

InformationsquelleAutor Chetan | 2011-04-20