Bonjour
Pour lancer un .exe à partir de mon programme java j'utilise la commande suivante :
Le problème est que je veux cacher la commande DOS qui se lance aussi.Code:final Process process = runtime.exec("prog.exe param1...")
Merci
Version imprimable
Bonjour
Pour lancer un .exe à partir de mon programme java j'utilise la commande suivante :
Le problème est que je veux cacher la commande DOS qui se lance aussi.Code:final Process process = runtime.exec("prog.exe param1...")
Merci
Très OS-spécifique, je ne suis pas sûr que Java ait le moindre contrôle là-dessus...par contre tu pourrais peut-être regarder la doc windows/shell pour savoir quelle commande shell ou options de commande utiliser pour lancer un process sans afficher sa console.
Salut,
Quel est ta commande exact ?
Il serait préférable d'utiliser exec(String[]) en séparant les paramètres, ou mieux ProcessBuilder !
Tu traites bien les flux d'E/S ???
a++
Merci
j'ai déjà posté la commande que j'utilise :.Code:final Process process = runtime.exec(prog.exe param1....)
En faite le problème se limite juste sur la façon de cacher la commande DOS de ce programme.
Effectivement, normalement la JVM crée des process fils sans console (les flux I/O sont redirigés de/vers des objets I/O java, le OutputStream de l'objet Process écrit dans stdin du process fils, le InputStream lit dans stdout du process fils).
Ne serais-ce pas plutôt ton process fils qui à son tour crée des sous-process, dont tu vois alors la console? A moins qu'il n'ouvre une console fille pour une raison ou une aurte. Dans ce cas le problème n'est pas du ressort de java, il faut que tu trouve quelles options de ligne de commande passer à ton prog1 pour qu'il n'ouvre pas de console.
Merci,
D'accord, la commande complète que je lance est la suivante :
Cela fait appraitre la console que je veux bien l'éviter dans mon application.Code:
1
2 final Process process = runtime.exec("ffmpeg -y -i INPUT -r 30000/1001 -b 2M -bt 4M -vcodec libx264 -pass 1 -vpre fastfirstpass -an output.mp4 ");
Je vois aussi que vous dite que c'est incomplet. Pourquoi ?
Comme dit adiGuba, il faudrait que tu capture les flux. Comme ce n'est pas un traitement interactif, tu n'as pas besoin de gérer l'OutputStream (celui qui écrit dans stdin), par contre il faudrait que tu lises les flux sortants de ffmpeg (qui sont exposés par l'objet process via les méthodes getInputStream() pour stdout et getErrorStream() pour stderr (pour te simplifier la vie tu peux rediriger les erreurs et ne traiter de le flux stdin si tu ne souhaite pas traiter les messages d'erreur, après c'est à toi de voir si ce ne serait pas mieux d'au moins savoir s'il y a eu problème).
Sinon, parcours la doc de ffmpeg pour savoir ce qui peut le pousser a ouvrir une console, parce que java n'a rien à voir avec ça.