• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Wie bekomme ich Parameter mit Leerzeichen in Info.plists Java/Arguments

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Wenn ich mit dem Jar Bundler (Macintosh HD ➣ Developer ➣ Applications ➣ Java Tools ➣ Jar Bundler.app) eine Anwendung erstelle und dort bei den »Arguments« etwas angebe, dann will es mir nicht gelingen, Argumente zu übergeben, die Leerzeichen enthalten.

Beim Kommandozeilenaufruf hat man ja die Wahl:
  • java -jar EchoParam.jar "a b"
  • java -jar EchoParam.jar 'a b'
  • java -jar EchoParam.jar a\ b
In jedem Fall bekommt man dort einen Parameter a b.

Egal, welche der Variante ich für die Arguments wähle, ich erhalte immer 2 Argumente:
  • "a b"
    1. "a
    2. b"
  • 'a b'
    1. 'a
    2. b'
  • a\ b
    1. a\
    2. b

Ist das nicht ziemlich banane? Wie kann ich OS X davon überzeugen, daß das Leerzeichen zum Argument gehört.

Achja! Ausprobiert habe ich auch noch "+", "%20", " " und " ", die letzteren beiden sogar durch direktes Editieren der Info.plist. Nichts hat geholfen.

Weiß hier jemand Rat?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Gelöst (so halb). Man muß auch richtig lesen. Apple schreibt
Arguments
A string or array of strings
[Quelle…]

Was mir noch fehlt ist, zur Laufzeit hier das Homedirectory hinein zu bekommen. $HOME tut es nicht und auch nicht ~.
 

mpete

Gast
Was mir noch fehlt ist, zur Laufzeit hier das Homedirectory hinein zu bekommen. $HOME tut es nicht und auch nicht ~.

System.getEnv("user.home"); müsste eigentlich das Home-Verzeichnis zurückgeben
oder brauchst Du das Homeverzeichnis wirklich in den Arguments ?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
System.getEnv("user.home"); müsste eigentlich das Home-Verzeichnis zurückgeben
System.getenv('HOME');

Das Problem ist einfach, daß ich den Source nicht verändern will bzw. in manchen Fällen auch nicht verändern kann.

Und selbst wenn, nutzt es doch nichts. Schließlich weiß das Programm ja nicht, ob es über den JarBundler, bzw. über JavaApplicationStub oder direkt aufgerufen wurde.

Wenn es direkt aufgerufen wurde, dann ist $HOME bereits ausgewertet und das Programm bekommt es nicht zu sehen, muß also gar nichts tun. Im Gegenteil! Wenn jetzt ein "$HOME" in irgendeinem String auftacht, dann war das dort wohl beabsichtigt.

Wurde es hingegen über JavaApplicationStub aufgerufen, dann hat die Shell noch nicht die $-Variablen ausgewertet, und das Programm müßte es tun.

Da aber das Programm das nun nicht weiß, kann es auch die Entscheidung nicht treffen, ob ein gefundenes $HOME auszuwerten ist, oder nicht.

Ich habe das nun so gelöst, daß ich eine eigene Launcher Klasse geschrieben habe, die man universell für Programme verwenden kann, die über JavaApplicationStub aufgerufen werden.

Finden kann man sie hier, hier und hier.
 

mpete

Gast
Sorry ich meinte

System.getProperty("user.home")

aber für Deinen Anwendungsfall eh wurscht.

Gruß,
Matthias