2016-04-18 2 views
0

J'essaie de créer une application Mac autonome à partir d'une application Java. J'ai mis en place le répertoire .app, configuré le fichier Info.plist, cuit dans les dépendances ainsi qu'un runtime Java. Je suis en mesure d'ouvrir avec succès le .app et lancer le programme et tout fonctionne sauf pour un morceau particulier de code:Java sur OS X: la commande "open" ne s'exécutera pas si le paquet .app contient un paquet JVM

ProcessBuilder pb = new ProcessBuilder("open", "/Applications/TextEdit.app"); 
pb.start(); 

Quand je lance le .app, ce code ne pas semblent courir ou au moins faire n'importe quoi. Si j'ouvre le contenu du paquet et lance le .jar, il fonctionne bien. J'ai réussi à le réduire à se produire uniquement lorsque le .app contient un ensemble d'exécution Java. Depuis l'exécution d'un .jar utilise Java du système et en cours d'exécution le .app utilise le Java fourni, cela doit être la raison pour laquelle je me bats.

La version de Java JDK installé par mon Mac doit être 1.8.0_77. La version fournie devrait être 1.8.0_74. Je l'ai attrapé de l'application Moneydance comme je l'ai utilisé comme référence lors de la réalisation de mon .app.

Toute aide est très appréciée car cela devrait être la dernière étape pour la sortie. J'ai créé cette question pour être plus spécifique que mon autre question here.

+0

Il serait intéressant de voir une impression de la variable d'environnement PATH sous les deux JVM. – RealSkeptic

+0

@RealSkeptic Il semble que tous les deux produisent le même chemin de '/ usr/bin:/bin:/usr/sbin:/sbin' –

+0

OK, alors la prochaine chose à faire est de nous dire quel est le code de sortie exact du processus , et si ce n'est pas zéro, donnez-nous le contenu du flux d'erreurs. – RealSkeptic

Répondre

0

Alors je vais répondre moi-même car le problème était un peu de mon côté.

La JVM fournie que j'utilisais (que j'avais copiée de l'application Moneydance) était le coupable. Je soupçonne que les créateurs de Moneydance pourraient avoir dépouillé leur ensemble de fonctions d'exécution que leur application n'utilise pas afin de réduire la taille du fichier. Quelle que soit la raison, mon problème a été résolu en créant mon propre bundle. Je l'ai fait en copiant /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk à MyApp.app/Contents/PlugIns/. Après cela, j'ai édité la clé Info.plist appelée JVMRuntime pour utiliser l'entrée jdk1.8.0_77.jdk. Mon application utilise maintenant ce JDK au lieu de l'ensemble que j'avais précédemment, et open fonctionne maintenant comme il se doit. Excusez-moi de ne pas faire mes devoirs, mais merci aux gens qui m'aident. J'ai trouvé le problème en écrivant des étapes de reproduction, donc je ne l'aurais peut-être pas trouvé sans vous. Je suppose que tout ce que je peux dire à ceux qui pourraient expérimenter quelque chose de similaire est de vérifier votre bundle JVM.