Comment lancer un programme depuis Java...

Le
Sylvain Pons
Comment lancer un programme ou un script depuis une application en Java qui
tourne sous XP ?
Est-il possible de récupérer la valeur de retour de ce programme (chaine de
caractère ou entier) qui tourne en mode console ?
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Pif
Le #188615

Comment lancer un programme ou un script depuis une application en Java qui
tourne sous XP ?
Est-il possible de récupérer la valeur de retour de ce programme (chaine de
caractère ou entier) qui tourne en mode console ?


heu :

pour exécuter : classe Runtime.exec()

ensuite, pour récupérer les messages de sortie, a toi de rediriger la
sortie standard sous forme d'un pipe, un peu comme pour les unix ( ex :
"dir > monfichier.txt" )

LR
Le #188561
Comment lancer un programme ou un script depuis une application en Java
qui tourne sous XP ?
Est-il possible de récupérer la valeur de retour de ce programme (chaine
de caractère ou entier) qui tourne en mode console ?


Runtime.exec te retoune un Process. Ensuite tu peux avoir le code de retour
par la méthode exitValue
A+Lilian

Rémi Cocula
Le #188431
Sylvain Pons wrote:

Comment lancer un programme ou un script depuis une application en Java
qui tourne sous XP ?
Est-il possible de récupérer la valeur de retour de ce programme (chaine
de caractère ou entier) qui tourne en mode console ?



Voici un exemple de code qui appelle la commande mysqldump :



File fout = new File("toto");
FileWriter fw = new FileWriter(fout);

System.out.println("debut ...");
Process pro = Runtime.getRuntime().exec("c:/mysql/bin/mysqldump test");

InputStream out = pro.getInputStream();

StringBuffer sb = new StringBuffer();

int i = out.read();
while ( i != -1 )
{
sb.append((char)i);
i = out.read();
}
fw.write(sb.toString());
out.close();
fw.close();

InputStream err = pro.getErrorStream();
StringBuffer sberr = new StringBuffer();
int j = err.read();
while ( j != -1 )
{
sberr.append((char)j);
j = err.read();
}
err.close();

pro.waitFor();
if (pro.exitValue() != 0) {
System.out.println(sberr.toString());
}

Trognon Patrice
Le #189123
Rémi Cocula wrote:

Sylvain Pons wrote:

Comment lancer un programme ou un script depuis une application en Java
qui tourne sous XP ?
Est-il possible de récupérer la valeur de retour de ce programme (chaine
de caractère ou entier) qui tourne en mode console ?



Voici un exemple de code qui appelle la commande mysqldump :



File fout = new File("toto");
FileWriter fw = new FileWriter(fout);

System.out.println("debut ...");
Process pro = Runtime.getRuntime().exec("c:/mysql/bin/mysqldump test");

InputStream out = pro.getInputStream();

StringBuffer sb = new StringBuffer();

int i = out.read();
while ( i != -1 )
{
sb.append((char)i);
i = out.read();
}
fw.write(sb.toString());
out.close();
fw.close();

InputStream err = pro.getErrorStream();
StringBuffer sberr = new StringBuffer();
int j = err.read();
while ( j != -1 )
{
sberr.append((char)j);
j = err.read();
}
err.close();

pro.waitFor();
if (pro.exitValue() != 0) {
System.out.println(sberr.toString());
}


Bonjour,

En effet exec puis lecture de out et err sinon le programme lancé
va se bloquer.
Par contre il me semble mieux de lire les flux out et err dans
un autre thread, le thread principale ne faisant que le pro.waitFor();
Perso j'ai un thread qui fait ta boucle :
int j = err.read();
while ( j != -1 ) {
sberr.append((char)j);
j = err.read();
}
err.close();
Mon thread principale lance le exec, puis lance un thread pour flusher
le out, un autre thread pour flusher le err, et elle fait le waitFor().




--
Cordialement,

Patrice Trognon
http://wwW.javadevel.com


Poster une réponse
Anonyme