je cours jdk sur Windows 7. J'essaie d'exécuter un logiciel externe (pocketsphinx_continous.exe) dans mon application java. Le logiciel s'exécute en permanence (pocketsphinx_continous.exe) et imprime quelques sorties à la console que j'aime lire par mon application Java.java: analyser la sortie d'exécuter la commande
si je lance « pocketsphinx_continous.exe » avec quelques params de la ligne de commande tout fonctionne bien et je vois la sortie du logiciel. Après avoir tué le processus, j'essaie de l'exécuter dans mon application Java. Mais java n'imprime aucune sortie sur la console.
Ceci est mon code:
public void start(){
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"D:/cmusphinx/pocketsphinx/bin/Release/x64/pocketsphinx_continuous.exe", "-hmm", "d:/cmusphinx/pocketsphinx/model/en-us/en-us", "-lm", "d:/cmusphinx/pocketsphinx/model/en-us/en-us.lm.bin", "-dict", "d:/cmusphinx/pocketsphinx/model/en-us/cmudict-en-us.dict", "-samprate", "16000/8000/48000", "-inmic", "yes"};
Process proc = rt.exec(commands);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Java ne s'imprime "Voici la sortie standard de la commande:" et rien de plus. Mais il ne va pas s'écraser, il fonctionne toujours sans aucune erreur. Il me semble que java attendra que la commande exécutée soit terminée jusqu'à ce qu'elle imprime quoi que ce soit. Mais le logiciel fonctionnera en permanence et imprimer quelques fois nouveaux résultats ...
Toutes les idées?
Meilleures salutations
Mike
Essayez d'utiliser cette méthode 'public int read (char [] cbuf, int désactivé, int len) throws IOException' ici' while ((s = stdInput.readLine())! = Null) {'au lieu de' readLine' car peut-être que votre sortie n'est jamais terminée en '\ n'. – ACV
Si ce programme est écrit en C ou C++, et éventuellement d'autres langues, par la sortie par défaut à un terminal se fait ligne par ligne, mais la sortie vers un fichier ou un tube est tamponnées - et ** Java utilise des tuyaux ** pour communiquer avec un processus enfant. Essayez 'yourcommandline | findstr .' à l'invite de commande; Si vous ne voyez pas la sortie, vous ne le verrez pas non plus dans Java. –