Laissez-moi d'abord dire que mon expérience avec le filetage est assez faible.Question de threading Java - l'écoute de n flux d'erreurs
J'ai une application qui démarre plusieurs autres fichiers Java via la méthode Runtime.exec
. Le problème est que les fichiers JAR démarrés doivent être exécutés simultanément, mais pour obtenir le flux d'erreurs des fichiers JAR démarrés, vous devez avoir une boucle «Assis et écoutée» jusqu'à la fin du processus.
C'est ce que j'ai maintenant:
_processes.add(Runtime.getRuntime().exec(commandList.toArray(new String[ commandList.size() ])));
Thread thread = new Thread(new Runnable() {
private final int _processNumber = _processes.size() - 1;
public void run() {
String streamData = _processNumber + " : ";
streamData += "StdError [\r";
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(_processes.get(_processNumber).getErrorStream()));
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
streamData += line + "\r";
}
bufferedReader.close();
streamData += "]\r";
LOG.error(streamData);
}
catch (Exception exception) {
LOG.fatal(exception.getMessage());
exception.printStackTrace();
}
}
});
thread.start();
Quelqu'un peut-il expliquer comment obtenir le « flux erreur threads d'écoute » pour fonctionner correctement?
TIA
Oui, j'ai déjà lu ceci. Le problème est que rt1 ouvre une socket d'écoute et que rt2 ouvre le côté write du socket. Si je démarre 2 threads pour se nourrir des flux de rt1, le thread parent semble bloquer et rt2 ne démarre jamais. J'ai essayé d'exécuter toutes les commandes exec et ensuite de démarrer tous les écouteurs et quand je le fais cela force les commandes exec à bloquer. – javamonkey79