pb avec Runtime.getRuntime().exec()

pb avec Runtime.getRuntime().exec() - Java - Programmation

Marsh Posté le 26-02-2004 à 22:59:24    

Bonjour a tous
je veux faire communiquer un programme java avec un programme c.
En premier lieu je veux juste lorsque je lance le programme en c recuperer les "printf" de celui ci dans mon prog en c ,Voila comment je fais le main a l'interieurde la classe du java:
public static void main(String args[]) {                          
 
 
String reception="";
   
                         
                        byte []tab_byte=new byte[1024];
                        int taille;
                         
                      try
   {
   Process proc = Runtime.getRuntime().exec("prog_c.exe" );
   
                         
                        InputStream out=proc.getInputStream();
                        nb=out.read(tab_byte);
                         
                       
   reception=new String(btab,0,nb);
                        System.out.println("le programme en c affiche :"+donnee_recu);
                         
                         
                         
   }
   catch(Exception ex) { }
  }
 
 
 
et voici le programme en c:
 
void main(void)
{
    printf("test" );
 
}
 
 
Lorsque j'execute le prog en java ,il me lance bien le programme en c,Seulement je ne recupère pas le "String" "test".
 
Pouvez vous sil vous plait m'aider ,savoir ce qu'il faut faire exactement ,merci d'avance

Reply

Marsh Posté le 26-02-2004 à 22:59:24   

Reply

Marsh Posté le 26-02-2004 à 23:21:29    

c'est pas plutot proc.getOutputStream plutot ?

Reply

Marsh Posté le 26-02-2004 à 23:34:15    

xav14 a écrit :

c'est pas plutot proc.getOutputStream plutot ?


 
 
non ca c'est pour envoyer des données du java au prog c ,moi pour l'instant je veux l'inverse,donc je pense que c'est bien ca

Reply

Marsh Posté le 27-02-2004 à 00:38:13    

ben non justement
 
getOutputStream te renvoie la sortie standard de ton prog C

Reply

Marsh Posté le 27-02-2004 à 00:39:47    

Xav14 a écrit :

ben non justement
 
getOutputStream te renvoie la sortie standard de ton prog C


ok je v tester et je te dit ce que cela fait

Reply

Marsh Posté le 27-02-2004 à 00:48:15    

adon13 a écrit :


ok je v tester et je te dit ce que cela fait


 
ce que tu dis ne marche pas,en effet si je fais comme tu me dis a savoir:
 
 
OutputStream out =proc.getOutputStream();
taille=out.read(tableau_byte);
 
 
il y a une erreur de compilation sur out.read(tableau_byte) car on fait plutot out.write(..).
Les outputstream s'est fait pour envoyer du java au c.Donc je pense que tu as tort ,tu peux tester si tu veux

Reply

Marsh Posté le 27-02-2004 à 10:42:24    

bah je viens de l'essayer ton code et ça marche très bien :D
 

Code :
  1. import java.io.InputStream;
  2. public class adon13Process {
  3. public static void main(String args[]) {
  4.  String reception = "";
  5.  byte[] tab_byte = new byte[1024];
  6.  int taille;
  7.  try {
  8.   Process proc = Runtime.getRuntime().exec("prog_c.exe" );
  9.   InputStream out = proc.getInputStream();
  10.   int nb = out.read(tab_byte);
  11.   reception = new String(tab_byte, 0, nb);
  12.   System.out.println("le programme en c affiche :" + reception);
  13.  } catch (Exception ex) {
  14.  }
  15. }
  16. }


 

le programme en c affiche :test


Message édité par xav14 le 27-02-2004 à 10:42:57
Reply

Marsh Posté le 27-02-2004 à 18:45:28    

Xav14 a écrit :

bah je viens de l'essayer ton code et ça marche très bien :D
 

Code :
  1. import java.io.InputStream;
  2. public class adon13Process {
  3. public static void main(String args[]) {
  4.  String reception = "";
  5.  byte[] tab_byte = new byte[1024];
  6.  int taille;
  7.  try {
  8.   Process proc = Runtime.getRuntime().exec("prog_c.exe" );
  9.   InputStream out = proc.getInputStream();
  10.   int nb = out.read(tab_byte);
  11.   reception = new String(tab_byte, 0, nb);
  12.   System.out.println("le programme en c affiche :" + reception);
  13.  } catch (Exception ex) {
  14.  }
  15. }
  16. }


 

le programme en c affiche :test




 
lol je pense que tu mens car dans ce programme il y a quelques erreurs que g trouvé et maintenant ca marche ,pour le stream tu t'etais egalement trompé,je le confirme ,merci tout de meme pour ton aide ,a la prochaine

Reply

Marsh Posté le 28-02-2004 à 04:25:21    

adon13 a écrit :


 
lol je pense que tu mens car dans ce programme il y a quelques erreurs que g trouvé et maintenant ca marche ,pour le stream tu t'etais egalement trompé,je le confirme ,merci tout de meme pour ton aide ,a la prochaine


 
le code que j'ai copié est le code corrigé et il marche  :p

Reply

Marsh Posté le 28-02-2004 à 14:49:24    

xav14 a écrit :


 
le code que j'ai copié est le code corrigé et il marche  :p  


 
 
 
bon,moi dans ce programme l'erreur que g repêré est la suivante(ce n'est pas une erreur de compilation mais d'execution):
quand on ecrit ceci:
byte[] tab_byte = new byte[1024];  
 
et que la sortie standard du programme en c est "test"(donc 4 bytes)
et que par la suite on fait:
reception = new String(tab_byte, 0, nb);
ca ne peut pas marcher car ta_byte est un tableau de 1024 octets alors que la sortie standard elle comporte 4 octets,c'etait pour cette raison que cela ne marc<hais pas chez ,maintenant si ca marche chez toi ,c'est parfait mais cela me semble bizzare.
 
pour remedier a  ce probleme soit je faisais
cbyte[] tab_byte = new byte[4]; dans la declaration  
 
soit je bufferrise l'intputstream afin de traiter les messsages de la sortie standard du prog en c ligne a ligne.
Et dans le programme en c je met "\n" a chaque message:
exemple :printf("le programme marche a present\n" );
 
Voila ,a la prochaine mec!!!
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed