Executer un executable externe en Java [2017]
Résolu
Utilisateur anonyme
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour/Bonsoir,
je cherche à lancer une application externe avec du code Java, l'app se lance dans le Gestionnaire de taches mais n'apparait pas.
Voici le code que j'utilise (qui est faux je pense):
je cherche à lancer une application externe avec du code Java, l'app se lance dans le Gestionnaire de taches mais n'apparait pas.
Voici le code que j'utilise (qui est faux je pense):
try {
String[] cmdAndArgs = new String[]{"cmd", "/c", "path"};
Runtime.getRuntime().exec(cmdAndArgs);
}
catch (Exception e) {
e.printStackTrace();
}
A voir également:
- Executer un executable externe en Java [2017]
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Chkdsk disque dur externe - Guide
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Bonjour,
Pas besoin de "cmd /c" fait juste ta commande "path"
Remarque : si tu es censé récupérer un affichage il faut rediriger les flux.
Pas besoin de "cmd /c" fait juste ta commande "path"
Remarque : si tu es censé récupérer un affichage il faut rediriger les flux.
Même si il le sujet est résolu il y a quelque chose de plus simple :
Desktop.getDesktop().open((new File("path")));
Cela dépend en fait de ce que l'on veux faire...
Runtime.exec est fait pour démarrer un programmer et interagir avec, en lui passant des paramètres, en récupérant les flux d'entrée/sortie, attendre la fin du processus, etc.
Desktop.open est fait pour ouvrir un fichier, ça l'ouvre avec le programme par défaut configuré sur le système d'exploitation (donc pas forcément celui qu'on voudrait)
Runtime.exec est fait pour démarrer un programmer et interagir avec, en lui passant des paramètres, en récupérant les flux d'entrée/sortie, attendre la fin du processus, etc.
Desktop.open est fait pour ouvrir un fichier, ça l'ouvre avec le programme par défaut configuré sur le système d'exploitation (donc pas forcément celui qu'on voudrait)
Je n'ai jamais eu l'occasion jusqu'à aujourd'hui de gérer les flux.
public static void main(String[] args) throws IOException { Process p = Runtime.getRuntime().exec(new String[]{"ping","localhost"}); Charset charsetMsDosLatin1 = Charset.forName("Cp850"); print(p.getInputStream(), System.out, charsetMsDosLatin1); print(p.getErrorStream(), System.err, charsetMsDosLatin1); System.out.println(p.exitValue()); } public static void print(InputStream in, PrintStream out, Charset charset) { try (Scanner sc = new Scanner(in, charset.name())) { while (sc.hasNextLine()) out.println(sc.nextLine()); } }Il n'existe pas d'alternative au c# de :
?
Après ce qu'il peut se passer c'est que le programme soit en attente de saisir quelque chose au clavier par exemple, dans ce cas il faut aussi se brancher sur ce flux.
Remarque : dans certains cas le code précédent (qui n'était qu'un exemple) peut également poser problème car on ne lit les messages d'erreurs qu'une fois tous les messages normaux lus, pour être complet il faudrait mettre ces deux codes dans des threads en parallèles qui affichent les deux flux en même temps.