Maison >Java >javaDidacticiel >Runtime.exec() vs ProcessBuilder : pourquoi ma commande se termine-t-elle avec le code 1001 ?
ProcessBuilder vs Runtime.exec() : une comparaison
Lors de l'exécution de commandes externes à partir de Java, les développeurs sont souvent confrontés à un dilemme entre l'utilisation du Runtime. getRuntime().exec(...) et new ProcessBuilder(...).start(). Pour faire la lumière sur les différences entre ces deux approches, examinons leur comportement en détail.
Étude de cas
Dans un cas d'utilisation où Runtime.exec() et ProcessBuilder est utilisé pour exécuter une commande spécifique, une différence notable apparaît. Avec Runtime.exec(), la commande se termine avec succès avec une valeur de sortie de 0. Cependant, lors de l'utilisation de ProcessBuilder, la valeur de sortie est 1001 et la commande se termine prématurément.
Cause première
La différence réside dans la façon dont exec() et ProcessBuilder gèrent les arguments de commande. exec() accepte une seule chaîne ou un tableau de chaînes, tokenisant l'entrée en arguments. En revanche, ProcessBuilder attend soit un tableau varargs de chaînes, soit une liste
Solution
Pour résoudre le problème avec ProcessBuilder, assurez-vous que les arguments de commande sont fournis sous forme de chaînes distinctes. Par exemple, au lieu de ce qui suit :
Process p = new ProcessBuilder( "C:\DoStuff.exe -arg1 -arg2" ).start();
Utilisez ceci :
Process p = new ProcessBuilder( "C:\DoStuff.exe", "-arg1", "-arg2" ).start();
Vous pouvez également créer une liste
List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); Process p = new ProcessBuilder(params).start();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!