Application externe lancé et traces non affichés en temps réel

Jaldo Messages postés 3 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 6 juillet 2009 - 3 juil. 2009 à 09:53
Jaldo Messages postés 3 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 6 juillet 2009 - 6 juil. 2009 à 11:39
Bonjour,
Merci pour l'aide que peut apporter celui qui lit ce message.
G un serveur écrit en C sous linux, je lance ce binaire à partir d'une application Java, forcément tant que le server tourne, ce process a la main et l'application Java est bloqué par la méthode waitFor().
Je lance un client en Parallèle dans un terminal sous linux et j'envois des commandes au serveur mentionné ci-haut, normalement dans la console Java, je dois voir apparaitre les traces du serveur puisque je dirige stdout vers la console Java, sauf que des paquets de traces apparaissent toutes les 60 secondes à peu près et donc mon application est à jeter à la poubelle puisque le but c'est d'envoyer des commandes au serveur et voir en temps réel ses traces.
Merci de ne pas écrire des réponses genre utilise la classe Process ou Runtime et InputStream , tout ça je maitrise , le probleme est que les traces du serveur ne s'affichent pas en temps réel dans la console Java.
Merci vous votre aide...

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
3 juil. 2009 à 10:36
Salut,

Si tu nous montre pas le code correspondant à ce qui ne marche pas comme il faut, ca va être dur de savoir d'où ca vient !
0
Jaldo Messages postés 3 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 6 juillet 2009
3 juil. 2009 à 11:03
Bonjour DARKSIDIOUS

le code est ci-dessous:

public class StreamCatcher extends Thread{
private BufferedReader streamReader = null;
public StreamCatcher(InputStream iStream){
  InputStreamReader iStreamReader = new InputStreamReader(iStream);
  streamReader = new BufferedReader(iStreamReader);
}

public void run(){
String line = null;
try{
    while ( (line = streamReader.readLine()) != null) {
         System.out.println(line);
        }}
catch(Exception e){
                              e.printStackTrace();
         }
         streamReader.close();
}}

Dans mon Main , l'appel se fait de la façon suivate :

String[] command = { "mon_serveur", _optionsssss, ..};
try {
    Process pr = Runtime.getRuntime().exec(command);
   StreamCatcher outCatcher = new StreamCatcher(pr.getInputStream());
   outCatcher.setPriority (Thread.MAX_PRIORITY);
   outCatcher.start();
   pr.waitFor();
}catch(Exception e){e.printStack();}

voila le code , si je lance le serveur dans un terminal sous linux et que jenvoie des commandes via le client lancé dans un autre terminal , g des traces dans le terminal du client tout le temp ( en fait c un serveur qui reçoit un flux TV et qui traite les tables du Flux).Sauf que kand je lance mon serveur à partir de l'appli Java vec le code plus haut , les memes traces apparaissent mais par paquet , c a dire chak x temps j'ai un paket de traces qui s'affichent d'un seul coup dans la console de mon environnement de développement Java, pour info il s'agit de NetBeans sous Linux.
Merci pour votre aide....
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 juil. 2009 à 08:14
Salut,

Je ne sais pas comment fonctionne exactement le BufferedReader mais son principe c'est qu'il bufferise les données afin d'optimiser les lectures. Et peut-être que le soucis vient de là : la lecture ne se déclencherai que lorsqu'il aurait suffisament de données à lire... Ce qui peut provoquer des lags et expliquerait les paquets de trace et non des traces en continu...

Essaye de n'utiliser que le InputStreamReader (sans passer par le BufferedReader donc), histoire de voir si ca ne viendrait pas de cà.
0
Jaldo Messages postés 3 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 6 juillet 2009
6 juil. 2009 à 11:39
Bonjour ,j'ai déjà pensé à cela mais ça fonctionne pas.
Je pense que je veux abandonner le projet..
Merci pour ton aide quand meme..
0
Rejoignez-nous