2012-11-01 5 views
1

J'ai essayé d'utiliser Java pour exécuter Microsoft Excel dans le codage en utilisant le code suivant:Java exécuter un programme dans le programme java pour mac

Process pro = Runtime.getRuntime().exec("open -a Microsoft"+"\\"+" "+"Excel"); 
pro.waitFor(); 

Lorsque j'imprime cette commande hors, il est exactement ce que j'utilise pour démarrer un Excel dans la ligne de commande manuellement, mais quand je veux le démarrer en utilisant java runtime, cela ne fonctionne pas. Je sais que dans la ligne de commande Microsoft Windows, il n'y a pas un tel problème, mais dans Mac existe-t-il un autre moyen de démarrer un programme en utilisant le code java?

J'ai essayé aussi de commencer une calculatrice en utilisant le même code comme:

Process pro = Runtime.getRuntime().exec("open -a Calculator"); 

Il fonctionne parfaitement, est-ce parce que l'espace entre le « Microsoft » et « Excel »?

Répondre

2

java.lang.Runtime.exec(String) analyse la ligne de commande en arguments simples lui-même et ne sait rien à propos des métacaractères du shell, par exemple en utilisant \ pour citer un caractère espace supposé entrer dans un argument.

Essayez de faire l'argument vous diviser au lieu:

String[] cmdline = { "open", "-a", "Microsoft Excel" }; 
Runtime.getRuntime.exec(cmdline); 

Notez que vous ne devriez pas besoin (ou être en mesure de) utiliser une barre oblique inverse pour échapper à l'espace dans le troisième élément. Lorsque vous tapez la commande sur la ligne de commande, cette barre oblique inverse est mangée par le shell car elle divise la ligne en arguments à passer au programme open, mais Runtime.exec() démarre les processus directement sans l'intervention d'un shell, donc si vous mettre un backslash là, open serait en mesure de le voir, et serait confus par elle.

+0

L'utilisation du tableau String résout mon problème, merci. –

Questions connexes