Maison >Java >javaDidacticiel >Runtime.exec() vs ProcessBuilder : pourquoi ma commande se termine-t-elle avec le code 1001 ?

Runtime.exec() vs ProcessBuilder : pourquoi ma commande se termine-t-elle avec le code 1001 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-29 13:32:09629parcourir

Runtime.exec() vs ProcessBuilder: Why Does My Command Exit with 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, où chaque élément est considéré comme un argument individuel.

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 et transmettez-le à ProcessBuilder comme suit :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn