Ich habe eine Java-Anwendung in einem Anwendungspaket, dem ich einen Dateityp zuordnen möchte.
Zum Beispiel, wenn es eine Datei gibt
foo.example
Wenn Sie auf diese Datei oder auf eine Datei mit der Erweiterung .example doppelklicken, möchte ich, dass meine Anwendung gestartet und die Datei geöffnet wird. Ich möchte auch, dass die Dateien das Symbol meiner Anwendung haben.
Ich möchte dies tun, indem ich die Datei info.plist bearbeite, aber es scheint nicht zu funktionieren.
Wie weiß meine Java-Anwendung außerdem, welche Datei an sie übergeben wurde?
Hier ist was getan werden muss:
Teil eins:
Zuerst müssen Sie alles einrichten, damit OS X weiß, dass die Erweiterung .example
mit Ihrer App verknüpft sein sollte. Dies geschieht mit der Info.plist-Datei Ihrer App, sofern Sie Ihren Java-Code bereits in ein .app
-Paket gebündelt haben (weitere Fragen hierzu).
Dieses Beispiel zeigt Ihnen genau, was Sie Ihrer Info.plist-Datei hinzufügen müssen (beachten Sie, dass das Beispiel für iOS gilt) , es funktioniert genau das gleiche auf OS X). Ich werde nicht duplizieren, was es sagt, aber kurz gesagt, müssen Sie zwei Schlüssel hinzufügen:
CFBundleDocumentTypes
: Lässt OS X den Typ der Dokumente kennen, die von der App UTExportedTypeDeclarations
: Weist OS X den benutzerdefinierten Dokumenttyp für diese App an, in diesem Fall .example
files Beachten Sie, dass es eine Reihe von Schlüsseln wie CFBundleTypeExtensions
gibt, die sehr ähnlich wie die oben genannten Schlüssel sind, aber seit OS 10.5 veraltet sind. Sie sollten sie also nicht verwenden, falls Apple entfernt sie vollständig.
Wenn Sie all das hinzufügen und die Dateitypzuordnung nicht zu funktionieren scheint, können Sie versuchen, das Problem mithilfe von lsregister zu beheben , ein Terminal-Tool, das Sie über Probleme informiert. Wenn es ohne Fehler zurückkommt, dann sollte alles eingerichtet werden.
Teil zwei:
Nun, da OS X Ihre Anwendung öffnet, wenn Sie auf eine Datei doppelklicken, die mit .example
endet, müssen Sie Ihre Java-Anwendung wissen lassen, wie sie mit der geöffneten Datei umgehen soll.
Ihre App erhält ein Ereignis vom Typ com.apple.eawt.AppEvent.OpenFilesEvent
, das Sie behandeln müssen. Vielleicht fragen Sie sich, wie Sie mit einem Ereignis umgehen, das ausgelöst wurde, bevor die Java-App überhaupt gestartet wurde. Es scheint jedoch, dass Java zuerst alle Vorgänge in der Hauptmethode der App ausführt und dann das Ereignis auslöst. Erstellen Sie also irgendwo in der Hauptmethode für denselben Thread den Listener mit dem folgenden Code:
Nachdem Sie dies getan haben, behandelt Ihre App sowohl die Dokumentdateien, die vor dem Start Ihrer App geöffnet wurden, als auch nachdem Ihre App gestartet wurde.
Tags und Links java macos file-association