Lancement application externe

cs_Stubbornman Messages postés 80 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 12 janvier 2007 - 15 nov. 2006 à 22:32
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 18 nov. 2006 à 10:03
Bonsoir,

Je cherche s'il est possible dans une application écrite en Java de lancer une autre application dont on n'a que l'executable.
Je m'explique:
J'écris un prog en Java, et je veux qu'il lance à un moment ou un autre une autre application (par toto.exe).
Est-ce possible ? Et si oui, comment fait-on ca?

J'ai cherche sur ce site et sur internet, mais j'ai rien trouve de concluant...

Merci de votre aide.

6 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 nov. 2006 à 23:30
Salut,

oui cherche du coté de java.lang.Runtime, et la prochaine fois merci de vraiment chercher avant de poster vu que c'est quand meme une question qui revient ennormement sur le forum...

juste pour te montrer combien tu as vraiment chercher sur ce site :
http://www.javafr.com/recherche.aspx?r=Executer+un+programme&tr=forum
http://www.javafr.com/recherche.aspx?r=Executer+exe&tr=forum
http://www.javafr.com/recherche.aspx?r=Executer+une+application&tr=forum
....

pour google :
http://www.google.fr/search?q=java+executer+une+application&ie=utf-8&oe=utf-8&rls=org.mozilla:fr:unofficial&client=firefox-a
....

pour developpez.com
http://java.developpez.com/faq/java/?page=systeme#ExecutionApplicationExterne

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_Stubbornman Messages postés 80 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 12 janvier 2007
17 nov. 2006 à 10:14
"et la prochaine fois merci de vraiment chercher"
Je me demande par quel miracle tu peux te permettre de faire cette remarque à tout le monde... Il n'y a pas un poste auquel tu as repondu ou tu te permet de mettre la parole des gens en doute, et ca me tape sur les nerfs d'autant que si tu lisais un peu mieux mon poste tu constaterais que j'ai ecris:
" J'ai cherche sur ce site et sur internet, mais j'ai rien trouve de concluant..."

Donc je te demanderais de tempérer un peu plus tes réponses.

Pour en revenir à ma question, je sais effectivement que c'est possible avec Runtime. Cependant j'ai constaté (après plusieurs heures de recherche, ose mettre ma parole en doute) que ca ne permet pas de lancer toutes les applications. La preuve en est que j'ai reussi à lancer une application (NetMeeting par exemple), mais pas une autre (la mienne) et je n'arrive pas à savoir ce qui peut bien les differencier...

Aussi je reformule la question: y'a-t-il un autre moyen qui permettrais de lancer toutes les applications ?
A moins que vous ayez une idee de la raison pour laquelle une application ne peut pas etre lancee de la sorte...
Merci de votre aide

PS: Désolé de mon emportement Twinuts, je comprends que ca puisse t'énerver que les gens préférent demander que chercher mais j'ai horreur qu'on mette ma parole en doute.... surtout quand ca n'est pas justifié.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
17 nov. 2006 à 11:10
Salut,

tu la lance comment ton application (quelle méthode exec) ? il y a des arguments ?
"mais pas une autre (la mienne)" <-- c'est une appli java ou autre ?

ton appli a besoin de fichiers qui se trouves dans son répertoire ?

tu as essayé de lire les flux stdout et stderr(de la classe Process) de ton application ?

bref détails plus le sujet stp.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_Stubbornman Messages postés 80 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 12 janvier 2007
18 nov. 2006 à 09:45
Salut,

J'utilise la méthode exec simple à laquelle je ne passe que le chemin d'accès à l'appli (par ex: C:\MonDir\MonAppli.exe).
L'application ne necessite pas d'arguments, je ne lui en fournit donc pas. Enfin, c'est une aplli dont je n'ai que l'executable, je ne connais pas ses origines ^^. Je ne sais donc pas en quoi elle est ecrite.

A priori l'appli a besoin de fichier qui sont dans  son repertoire, mais dans la mesure ou je fournit le chemin d'acces, est-ce qu'elle ne devrait pas retrouver ses petits ?

Enfin, je ne suis pas sur de lire les flux stdouit et stderr correctement, mais la ca vient de mes competences. Je dois pas bien m'y prendre. A priori le stderr retourne -1.

Merci de ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 nov. 2006 à 09:52
Salut,

justement non qu tu mettes le chemin complet ou non l'appli preserve ton root dir donc elle n'aura pas les fichiers dont elle a besoin, contrairement à netmeeting qui lui est dans le path system.

 utilise cette méthode pour executer ton application :
Process p = Runtime.getRuntime().exec(cmd, null, new File("repertoire de l'application"));

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 nov. 2006 à 10:03
Salu,

concernant la récupération des flux:

private InputStream      stdOut   = null;
private OutputStream   stdIn      = null;
private InputStream      stdErr    = null;

Process process = Runtime.getRuntime().exec(....);
tdOut = process.getInputStream();
stdErr = process.getErrorStream();
stdIn = process.getOutputStream();

//pour ecrire
stdIn.write(str.getBytes(), 0, str.length());
stdIn.flush();
//pour lire (avec le jdk 1.5)
Scanner s = null;
String nl = System.getProperty("line.separator");
s = new Scanner(stdErr);//tu mets sdtOut à la place si tu veux le lire
String ret = "";
while (s.hasNext())
            ret += s.nextLine() + nl;
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous