je suis sous Mac OS Lion, avec la version Java 1.6.0_26Java commande Runtime.getRuntime(). Exec() dans Mac OS
Je fais une petite application pour Mac en Java avec un menu principal pour l'utilisateur, afin qu'il puisse choisir plusieurs options.
L'un d'eux est d'installer une application en utilisant un .pkg
Tout fonctionnait très bien avec ces commandes:
File instFolder = new File(System.getProperty("user.dir") + "/foldername/appInstaller.pkg");
String s = "open "+ instFolder.toString();
Process p = Runtime.getRuntime().exec(s);
Puis je me suis aperçu qu'il ya un problème quand foldername a des espaces ou si je copie ce fichier java avec les sous-dossiers nécessaires à un stylo USB avec "NO NAME" comme nom (ou un nom avec des espaces).
Parce que s deviendra quelque chose comme:
ouvert/Volumes/NO NAME/foldername/appInstaller.pkg
ou
ouvert/Utilisateurs/user1/nom de bureau/dossier/appInstaller.pkg
Ainsi, lorsque vous exécutez le processus p, la commande se terminera lorsque le premier espace apparaît sur le chemin
ouvert/Volumes/NO
ou
ouverts/Utilisateurs/user1/Desktop/dossier
Pour essayer de résoudre ce problème, je changé la définition de s pour quelque chose comme ceci:
String s = "open "+ "\"" + instFolder.toString() + "\"";
Il est arrêté fonctionne bien. La chose étrange est que si je copie la valeur s (après avoir créé la variable s) et le coller dans le terminal, il fonctionne:
ouvert «/Users/utilisateur1/Desktop/Nom du dossier/appInstaller.pkg »
Mais en cours d'exécution à partir de Java, cela ne fonctionne pas.
Pourriez-vous m'aider, s'il vous plaît?
Merci.
Bonjour @ beny23: Merci pour vos suggestions. Ils ont tous deux bien travaillé, mais j'ai une question. Supposons que le dossier instFolder est erroné, alors quand j'essaye d'exécuter le programme d'installation, le processus renverra un code de sortie <> 0 pour que je sache qu'une erreur s'est produite. Comment puis-je vérifier cela avec le constructeur de processus? – user897013