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
Messages postés8Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention 4 avril 2008
-
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 ?
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006 13 avril 2006 à 11:02
Merci.
Avec ce que tu m'as dit de rajouter dans exec, la console s'affiche
enfin.. Par contre il n'y a toujours rien dans stdout ( il affiche null
), alors que la console affiche tous les caractères qu'il doit y avoir.
De plus l'envoi sur stdin de "s\n" n'a aucun effet sur la console..
Alors que ça m'affiche toujours true..
Mais déjà un progrès : il lance l'application et m'affiche la console..
Ce que j'aimerai maintenant, c'est pouvoir communiquer avec cette console.
Tu as peut-être une idée à ce que je doit rajouter.. ( Je me demande si
ça vient pas du fait qu'il faille attendre que l'appli se lance - parce
que java affiche "null true null", et ensuite la console s'affiche.. )
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006 13 avril 2006 à 13:52
J'ai essayé de mettre un timer avant les opérations de lecture et
écriture ( pour laisser le temps à l'appli de bien se lancer ), et
apparait ce probleme :
- Quand je mets en commentaire l'opération
d'écriture, et que je laisse les 2 opérations de lecture, tout se passe
comme il faut : le programme se lance, le timer fait son décompte, et à
la fin du décompte java m'affiche 2 null. OK.
- Quand je remet l'écriture, il lance le programme,
fait le décompte, mais au moment d'écrire, il me dit ça : "le canal de
communication est sur le point d'être fermé"...
Si je mets pas de timer, il arrive à écrire ( puisqu'il m'affiche true
) mais sans effet sur l'appli. Et quand je mets un timer juste avant,
il ne fait plus l'écriture ( et m'écrit false ).
Comprends-tu qqchose ?
Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 13 avril 2006 à 23:22
Salut,
normalement tu n'as pas besoin de timer ou thread pour attendre pour
que ton appli prenne en compte tes instruction ou tes read bref ....
tu dis que tu as ce message : "le canal de communication est sur le point d'être fermé"
qui te le dis l'application java ou l'autre applicatiuon????? c'est un comportement normal de l'application ou non??
tu dis aussi que qd tu met le timer et que tu ecris il te retourne false
peux tu stp rajouter le code ci dessous dans l'objet Exec et afficher
son retour apres l'ecriture (je pense que le commentaire de sun sur la
methode est assez explicite)
/**
* causes the current thread to wait, if necessary, until the
* process represented by this
Process
object has
* terminated. This method returns
* immediately if the subprocess has already terminated. If the
* subprocess has not yet terminated, the calling thread will be
* blocked until the subprocess exits.
*
* @return the exit value of the process. By convention,
*
0
indicates normal termination.
* @exception InterruptedException if the current thread is
*
{@link Thread#interrupt() interrupted} by another thread
*
while it is waiting, then the wait is ended and an
*
{@link InterruptedException} is thrown.
*/
public int waitFor(){
try {
return process.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
return -1;
}
}
l'application bloque sur ce code ou t'affiche dirrectement un truc?
peux tu aussi afficher le code ci-dessous(à ajouter dans l'objet Exec) il te retourne une exception ou une valeur?
/**
* Returns the exit value for the subprocess.
*
* @return the exit value of the subprocess represented by this
*
Process
object. by convention, the value
*
0
indicates normal termination.
* @exception IllegalThreadStateException if the subprocess represented
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 18 avril 2006 à 11:41
Il est simplement impossible que la jvm renvoit un code d'exception
en français, il faut que tu trouve d'ou vient ce texte c'est tres
important parceque la il masque totalement le vrai message d'erreur
(cherche du coté de throw new XXXXException("Le canal de communication est sur le point d'être fermé");
cs_Dimension N
Messages postés17Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention18 avril 2006 18 avril 2006 à 12:21
Dans mon programme, j'ai 6 classes, et je te jure qu'il n'y a pas ce type de message...
Je ne comprend pas. J'imagine que ce n'est pas un message des classes prédefinies, donc je ne vois pas du tout..
Impossible de te dire d'où vient ce message, je ne l'ai jamais écrit
dans mes classes. C'est certain. Si tu veux, je fais un copier-coller
de toutes mes classes et tu pourras le constater de toi-même..
N'est-il pas possible que ce soit l'application que je lance qui renvoie ça ?
cs_modigliani
Messages postés8Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention 4 avril 2008 1 mai 2006 à 02:35
meme probleme pour moi
je veux juste afficher la fenetre du dos dans un cadre et je n'arrive pas
la commande exec execute regedit et calc mais pour dos (cmd) execution sans affichage