2016-04-18 1 views
0

Ich versuche, eine eigenständige Mac-App aus einer Java-Anwendung zu erstellen. Ich habe das .app-Verzeichnis eingerichtet, die Info.plist-Datei konfiguriert, in Abhängigkeiten gebacken sowie eine Java-Laufzeitumgebung. Ich bin erfolgreich in der Lage, die .app zu öffnen und starten Sie das Programm und alles funktioniert mit Ausnahme eines eigentümlichen Stück Code:Java unter OS X: Der Befehl "open" wird nicht ausgeführt, wenn das .app-Paket ein JVM-Bundle enthält

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

Als ich das .app starten, dieser Code tut nicht scheinen oder zumindest zu laufen mach alles. Wenn ich den Paketinhalt öffne und die JAR-Datei öffne, läuft es einwandfrei. Ich habe es geschafft, es einzugrenzen, nur wenn die .app ein Java-Laufzeitpaket enthält. Da das Ausführen einer .jar-Datei das Java-System des Systems verwendet und die .app-Datei das gebündelte Java verwendet, muss dies der Grund sein, warum ich Probleme habe.

Die Version von meinem Mac installierten Java JDK sollte 1.8.0_77 sein. Die gebündelte Version sollte 1.8.0_74 sein. Ich nahm es aus der Moneydance Anwendung, wie ich es als Referenz verwendet, wenn ich meine .app.

Jede Hilfe wird sehr geschätzt, da dies der letzte Schritt zur Veröffentlichung sein sollte. Ich habe diese Frage genauer formuliert als meine andere Frage here.

+0

Es wäre interessant, einen Ausdruck der PATH-Umgebungsvariablen unter den beiden JVMs zu sehen. – RealSkeptic

+0

@RealSkeptic Es scheint, dass beide den gleichen PFAD von '/ usr/bin ausgeben:/bin:/usr/sbin:/sbin' –

+0

OK, dann ist die nächste Sache zu sagen, was der genaue Exit-Code aus dem Prozess ist , und wenn es nicht null ist, geben Sie uns den Inhalt des Fehlerstroms. – RealSkeptic

Antwort

0

Also werde ich das selbst beantworten, da das Problem etwas auf meiner Seite war.

Die gebündelte JVM, die ich benutzte (die ich von der Moneydance-Anwendung kopiert hatte), war der Schuldige. Ich vermute, dass die Ersteller von Moneydance ihr Runtime Bundle von Features entfernt haben, die ihre App nicht benutzt, um die Dateigröße zu reduzieren. Was auch immer der Grund war, mein Problem wurde behoben, indem ich mein eigenes Paket erstellte.

Ich tat dies, indem ich /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk zu MyApp.app/Contents/PlugIns/ kopiere. Danach habe ich den Schlüssel Info.plist mit dem Namen JVMRuntime bearbeitet, um den Eintrag jdk1.8.0_77.jdk zu verwenden. Meine App verwendet jetzt dieses JDK anstelle des zuvor vorhandenen Pakets, und open funktioniert jetzt wie es sollte.

Entschuldigung dafür, dass ich meine Hausaufgaben nicht gemacht habe, aber danke, dass die Leute helfen. Ich habe das Problem beim Verfassen von Reproduktionsschritten gefunden, so dass ich es möglicherweise ohne Sie nicht gefunden hätte. Ich schätze, alles, was ich denen sagen kann, die etwas Ähnliches erleben könnten, ist das Überprüfen Ihres JVM-Pakets.

Verwandte Themen