Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment lancer un programme depuis Java...

4 réponses
Avatar
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 ?

4 réponses

Avatar
Pif

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" )

Avatar
LR
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

Avatar
Rémi Cocula
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());
}

Avatar
Trognon Patrice
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