Execution d'un programme C dans du java

Execution d'un programme C dans du java - Java - Programmation

Marsh Posté le 05-06-2005 à 01:27:19    

Bonjour, dans le cadre d'un projet je dois lancer plusieurs applications a partir d'un programme java.
 
Premier lancement : le C++ je m'y suis pris comme ca et ca fonctionne
Ce programme C++ etant avec interface graphique:
 

Code :
  1. if  (aux == tcp_cpp){
  2.          
  3.             Runtime run= Runtime.getRuntime();
  4.             String cmd= "TCP_cpp.exe";
  5.              try {
  6.               Process proc= run.exec(cmd);
  7.              } catch (IOException e1) {
  8.               e1.printStackTrace();
  9.              }
  10.            
  11.              }


 
Deuxieme lancement : le C sans interface graphique et je m'y suis pris de la meme facon :

Code :
  1. if  (aux == tcp_c){
  2.              System.out.println("ok" );
  3.              Runtime run= Runtime.getRuntime();
  4.                 String cmd= "TCP_c.exe";
  5.                   try {
  6.                
  7.                    Process proc= run.exec(cmd);
  8.                   } catch (IOException e1) {
  9.                    e1.printStackTrace();
  10.                   }
  11.                   System.out.println("ok" );
  12.                   }


 
Resultat : dans la console les 2 "ok" s'affiche mais le programme ne se lance pas  
 
Si quelqu'un pourrait m'eclairer sur ce probleme je suis preneur

Reply

Marsh Posté le 05-06-2005 à 01:27:19   

Reply

Marsh Posté le 05-06-2005 à 01:39:54    

Pourquoi tu parles de C et C++, c'est quoi le rapport avec la choucroute ?

Reply

Marsh Posté le 05-06-2005 à 01:43:33    

parce que g une premiere appli en java avec 2 boutons :
un qui s'appelle C++ qd on clique dessus il lance le premier code
un deuxieme qui s'appelle C et qui (est censé)lancer le deuxieme code  
=>le programme en C ne se lancant pas

Reply

Marsh Posté le 05-06-2005 à 01:46:09    

quand tu le lances seul en console il marche ton programme C, genre il fait pas un coredump?

Reply

Marsh Posté le 05-06-2005 à 01:48:21    

Ok ça j'avais compris. Mais ça aurait été programmé en brainfuck que je vois pas ce que ça changerait.
 
Sinon je vois mal comment on peut t'aider avec si peu d'informations. Il faudrait nous dire ce qu'est censé faire "TCP_c.exe".

Reply

Marsh Posté le 05-06-2005 à 01:50:43    

quand je lance en console pas de probleme  
TCP_c.exe : demande a l'utilisateur une adresse ip un port et un message le tout est envoyer a un serveur d'echo qui repond la chaine que l'utilisateur a tapper  
mais il se passe rien du tout je vois meme pas une fenetre dos qui s'ouvre

Reply

Marsh Posté le 05-06-2005 à 02:06:02    

cachalot a écrit :

quand je lance en console pas de probleme  
TCP_c.exe : demande a l'utilisateur une adresse ip un port et un message le tout est envoyer a un serveur d'echo qui repond la chaine que l'utilisateur a tapper  
mais il se passe rien du tout je vois meme pas une fenetre dos qui s'ouvre


 
Pourquoi est-ce qu'une fenêtre devrait s'ouvrir ? T'es sous 98 pour avoir une fenêtre DOS qui s'ouvre (pas de DOS sous 2K/XP) ?
 
Sinon si t'as des données à faire passer à ton programme, je ne suis pas certain que tu t'y prennes de la meilleure façon. Le mieux serait de pouvoir les passer en paramètre. Ce qui me paraît évident c'est que ton programme TCP_c.exe lit l'entrée standard et qu'il n'y a justement rien dans l'entrée standard, donc il ne fait rien. [:spamafote]

Reply

Marsh Posté le 05-06-2005 à 02:11:56    

en fait quand il se lance il doit demander l'adresse du serveur directe comme quand je le lance en ligne de commande donc ouvrir une fenetre dos no?

Reply

Marsh Posté le 05-06-2005 à 02:30:51    

cachalot a écrit :

en fait quand il se lance il doit demander l'adresse du serveur directe comme quand je le lance en ligne de commande donc ouvrir une fenetre dos no?


 
Quand tu lances ton programme en ligne de commande, l'invité de commande se charge de passer ce que tu tapes dans l'entrée standard du programme. Si tu lances ton programme ailleur que dans un invité de commande, il lira toujours sur l'entrée standard, mais il faut savoir comment écrire dans ladite entrée standard. Une solution pourrait être de lancer l'invité de commande Windows ("command" ou "cmd" je crois) avec comme paramètre ton programme (il faut peut-être une option entre les deux, je te laisse chercher je suis pas sous Windows...) ce qui aurait pour effet de lancer ton programme dans une console. Tu dois même pouvoir ajouter une option pour que la console ne se ferme pas quand ton programme se termine.

Reply

Marsh Posté le 05-06-2005 à 02:37:44    

une petite question que je viens de voir  
lorsque le programme que je veux lancer possede une interface graphique il se lance
mais si je met  
String cmd= "cmd.exe";
par exemple rien ne se passe a noter que mon programme TCP_c.exe n'est pas en interface graphique est ce que ca peut venir de la?

Reply

Marsh Posté le 05-06-2005 à 02:37:44   

Reply

Marsh Posté le 05-06-2005 à 02:44:26    

J'abandonne, tu lis rien de ce que j'écris. Ou alors tu ne comprends rien, mais dans ce cas il faudrait expliquer ce que tu ne comprends pas...


Message édité par Profil supprimé le 05-06-2005 à 02:45:50
Reply

Marsh Posté le 05-06-2005 à 02:50:32    

sisi j'ai bien lu et tester des solutions que ta proposé mais rien ne marche dernier exemple en date trouvé en parallele sur le net  
String cmd = "CMD.EXE /C TCP_c.exe"; =>meme resultat donc rien  
 
g ensuite mis TCP_c.exe dans un batch
 
String cmd = "CMD.EXE /C LancementTCP_c.bat"; => meme resultat donc rien encore une fois

Reply

Marsh Posté le 06-06-2005 à 12:01:09    

quand tu lances un programme console C/C++ depuis java il ne t'ouvre pas de fenetre, il fait tout en arriere plan donc si tu veux pouvoir communiquer avec ton programme C/C++ tu dois rediriger tes flots standards.
 
essaye de jongler avec java.lang.Process.get[Input|Output|Error]Stream() et java.lang.System.set[In|Out|Err](...), tu dois pouvoir trouver une solution

Reply

Sujets relatifs:

Leave a Replay

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