Interface en Java qui lance et communique avec un .exe ?
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006
-
6 avril 2006 à 23:29
cs_modigliani -
1 mai 2006 à 02:35
Bonjour,
je suis en train de faire évoluer un logiciel libre : Surface Evolver. C'est un logiciel appliqué à la chimie simulant des nano-surfaces, qui, une fois lancé, affiche une console MS DOS. On y rentre des commandes pour pouvoir afficher la fenetre de simulation ( fenetre graphique ), ou effectuer des operations sur la surface, entre autres.
Le but de mon travail est d'instaurer une interface qui rend l'utilisation de ce logiciel plus convivial.
Mes QUESTIONS sont :
- Peut-on lancer de JAVA un exécutable ( donc ce logiciel ), et peut-on en intercepter les fenetres pour intégrer (par exemple) la fenetre graphique dans l'interface et pour demander à ce que la console ne soit pas visible ?
- Si oui, comment faire ? ( J'ai essayé avec runtime et exec, ca me met aucune erreur mais ca ne me lance pas le programme).
- Et enfin, peut-on communiquer avec le programme lancé pour que ce soit l'interface qui donne les commandes à la console, et non plus l'utilisateur ?
Je vous remercie infiniement pour vos réponses.
PS : le langage source du logiciel est le C. Si je veux utiliser des fonctions du programme existant, il faudrait que j'utilise la JNI. C'est pourquoi j'essaye de trouver une solution alternative pour éviter de reprendre le code.
A voir également:
Interface en Java qui lance et communique avec un .exe ?
scaryman
Messages postés492Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention16 mai 200712 7 avril 2006 à 00:21
Salut
Quand tu lances le logiciel et que tu ne recois aucune erreur, c'est possible que ton programme soit lancé : essaie de lui envoyer des commandes comme si tu étais dans la fenetre DOS en utilisant l'outpustream de ton process.
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006 7 avril 2006 à 11:14
Merci, j'ai essayé ce que vous avez dit, voilà mon code :
Runtime run = Runtime.getRuntime();
Process process = null;
try {
process = run.exec("evolver.exe Cat_plein_asym");
OutputStream out = process.getOutputStream();
out.write((int)'s');
out.write((int)'\n');
}
catch (IOException ioe) {
ioe.printStackTrace();
}
Aucune erreur ne se produit, mais rien ne s'affiche. Et si j'essaie avec un autre programme, genre "notepad.exe", là ça marche. Je me demande si ça ne vient pas du fait que ce soit une console. Mais si jamais le processus etait bien lancé, quand je luis écris 's' et '\n', il devrait m'afficher une fenêtre graphique avec la modélisation de la surface. Et rien ne se passe...
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006 7 avril 2006 à 12:39
Sur la sortie stdErr, il ne me retourne rien.
Quand je fais un print de process.exitValue(), il me dit que le processus n'est pas terminé ( ce qui veut bien dire qu'il est en cours d'exécution ).
Et quand je fais un print de process.toString(), ca me dit:
java.lang.Win32Process@15663a2
Voilà, je pense que le programme s'est lancé, mais qu'il n'affiche pas les fenêtres : avez-vous une solution ?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 7 avril 2006 à 14:37
Salut,
ba je ne sais pas trop la surtout si avec le note pas ca fonctionne
normalement si l'application permet la saisie en ligne de commande
d'information elle devrait se comporter comme le bloc note.
cependant peux-tu essayer d'afficher stdout avant et après la saisie
d'information. Pour stderr enfaite c'est pas forcé qu'il soit
renseigné, il l'est seulement et seulement si les developpeur ecrive
les erreur dessus ....
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006 7 avril 2006 à 16:43
En fait c'est bon, quand je fais afficher le stdout, il s'affiche en fait ce qu'il devrait y avoir sur la console, c'est à dire la présentation du logiciel.
Donc le logiciel est bien lancé : le problème est donc de pouvoir afficher ces fenêtres, ou même mieux pouvoir avoir un contrôle sue celles-ci ( les intercepter en quelque sorte ).
Parceque là, a fortiori, le programme est en route, mais n'affiche rien.
Le problème, c'est qu'il n'affiche pas tout ce qu'il devrait afficher,
il n'affiche que 200 ou 300 caractères, puis il s'arrete. Alors qu'il
est censé en afficher beaucoup plus.
Comme si le programme ne s'était pas lancé entièrement... Bizarre..
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006 12 avril 2006 à 10:02
Sinon, par rapport au prog que tu m'as filé, j'ai fait des tests, et
s'il m'affiche "null", c'est parce qu'il ne rentre pas dans le try dans
le read().
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 12 avril 2006 à 10:52
Salut,
le fait qu'il te renvoi null c'est simplement et qu'il ne rentre pas
dans stdOut.available() donc il n'y a strictement rien a lire
"Est-ce qu'il ne faut pas faire communiquer Java et Ms-Dos par Socket ?"
tu utilise déjà un principe similaire en utilisant l'objet process
apres pour ton teste avec
System.out.println(ex.read()); //null
System.out.println(ex.writeln("s"));//true
System.out.println(ex.read());//null
le premier veut dire qu'il y a un soushi sur la lecture surtout si l'application et sencé t'afficher un pavé de text.
le true veut dire qu'il a qd meme pu lui ecrire le s\n
le troisieme veut dire soit que l'application ne te retourne pas de
confirmation apres une saisie soit qu'il y a tjr le meme prob avec la
lecture