Montag, 8. März 2010

Integration von Java Anwendungen in Mac OS X

Java Anwendungen laufen auf fast jeder Plattform, der Mac ist hier keine Ausnahme. Aber der Mac ist nicht nur was besonderes sondern er ist auch ein bisschen anders. Eine normale, unangepasste Java Anwendung sieht wie folgt aus:
Baralga Zeiterfassung auf dem Mac
Was dem Mac-User auffällt ist, dass das Menü im Fenster und nicht wie Mac-üblich in der Menüleiste untergebracht ist. Um dies zu ändern muss ein Property-Wert gesetzt werden, dies kann in der Kommandozeile beim Aufruf des Programm passieren oder im Code. 
   java -Dapple.laf.useScreenMenuBar=true -jar baralga-core-1.4.4-SNAPSHOT.jar
Alternativ kann man in der Klasse die die Main-Methode enthält folgende Zeile einfügen:
static {
   System.setProperty("apple.laf.useScreenMenuBar", "true");
}
Dieser Code wird beim Erzeugen eines Objektes dieser Klasse ausgeführt und der Property-Wert gesetzt.  Das Ergebnis sieht dann wie folgt aus:

Noch besser wird es wenn man folgendes Argument mit übergibt:
   -Xdock:name="Alif" 
Es wird damit der Name der Applikation gesetzt. Dies führt dazu, dass nicht die Javaklasse in der Menüleiste auftaucht sondern der Applikationsname. Dies gilt auch für Dock. Wenn man einen Mac zur Verfügung hat kann man es sich einfacher machen, in dem man den Jar Bundler benutzt. Dieser ist ein Werkzeug, dass mit Apples Xcode installiert wird. Leider ist es nicht separat zu finden. Mit Hilfe des Jar Bundlers lassen sich aus Java-Applikationen einfach Doppel-Klick-bare Anwendungen bauen. Naürlich kann sind auch richtig gebaute JARs Doppel-Klick-bare Anwendungen,  mit Hilfe  des Jar Bundlers kann man alle Mac OS X spezifischen Einstellungen vornehmen. Für den Fall das, die Java-Anwendung kein sogenanntes Big-JAR ist, kann man die benötigeten JARs auch mit Hilfe des Jar Bundlers hinzufügen. Leider fügt der Jar Bundler nur absolute Pfade in die entsprechende Datei (Info.plist) ein. Man kann jetzt die abhängigen Bibliotheken mit in Paket kopieren z.B. unter Contents/Resoures/Java/lib. DAnach muss man nur noch die Pfade in der Datei Info.plist korrigieren und die absoluten Pfade ersetzen. Dazu kann man z.B. JEdit benutzen:
   $JAVAROOT/lib/commons-lang-2.4.jar
Die Variable JAVAROOT gibt den vollständigen Pfad zum Verzeichnis an, in dem die eigentliche JAR meines Programms liegt, also /Application/Baralga/Baralga/Contents/Resource/Java.

Keine Kommentare:

Kommentar veröffentlichen