2009-10-15 4 views
9

Mam aplikację Java w pakiecie aplikacji, z którą chcę skojarzyć typ pliku.Kliknij dwukrotnie plik dokumentu w systemie Mac OS X, aby otworzyć aplikację Java

Na przykład, jeśli istnieje plik

foo.example

kiedy ten plik, lub dowolny plik z rozszerzeniem .example, jest dwukrotnym kliknięciu, chcę mojej aplikacji do uruchomienia i otwórz plik . Chcę również, aby pliki miały ikonę mojej aplikacji.

Chciałbym to zrobić, edytując plik info.plist, ale wygląda na to, że nie działa.

Ponadto, w jaki sposób moja aplikacja Java wie, który plik jest do niej przekazywany?

+0

Pseudo-odpowiedź: przeczytaj dokumenty. Jest tam. (nie tylko przeszukuj Javę, ale ogólnie: programowanie na komputerach Macintosh – JoePasq

+0

Jakieś konkretne miejsce lub link? Przeglądałem dokumenty, ale nie mogę tego zrobić, przykład byłby miły. – steve

Odpowiedz

4

Oto co należy zrobić:

Part One:

Najpierw musisz skonfigurować, aby system OS X wiedział, że rozszerzenie .example powinno być powiązane z Twoją aplikacją. Odbywa się to za pomocą pliku Info.plist twojej aplikacji, pod warunkiem, że już zawarłeś swój kod Java w pakiecie .app (zobacz inne pytania, jak to zrobić).

This example pokazuje dokładnie, co dodać do pliku Info.plist (należy pamiętać, że chociaż przykład dotyczy iOS, działa dokładnie tak samo na OS X). Nie będę powielać to, co mówi, ale w skrócie, trzeba dodać dwa przyciski:

  • CFBundleDocumentTypes: Pozwala OS X znać rodzaj dokumentów, które mogą być otwierane przez aplikację
  • UTExportedTypeDeclarations: Informuje OS X o niestandardowych typu dokumentu specyficzne dla tej aplikacji, która w tym przypadku jest .example pliki

Należy pamiętać, że istnieje szereg klawiszy takich jak CFBundleTypeExtensions że wiele zrobić to samo, co powyżej klawiszy, ale zostały one przestarzałe od OS 10.5, więc nie chcesz ich używać w przypadku, gdy Apple je całkowicie usunie.

Jeśli dodasz to wszystko, a powiązanie typów plików nie działa, możesz spróbować użyć debug the problem using lsregister, narzędzia Terminal, które poinformuje Cię o wszelkich problemach. Jeśli wróci bez żadnych błędów, wszystko powinno zostać skonfigurowane.

Część druga:

Teraz OS X otworzy aplikację po dwukrotnym kliknięciu na plik kończąc .example, trzeba pozwolić aplikacja Java wiedzieć, jak radzić sobie plik jest otwierany.

Twoja aplikacja będzie otrzymywać zdarzenie typu com.apple.eawt.AppEvent.OpenFilesEvent, z którym będziesz musiał sobie poradzić.Być może zadajesz sobie pytanie, jak radzisz sobie z zdarzeniem wywołanym przed uruchomieniem aplikacji Java, ale wydaje się, że Java najpierw wykonuje wszystko w głównej metodzie aplikacji, a następnie uruchamia zdarzenie. Więc gdzieś w głównym sposobem na tym samym wątku, tworzenie słuchacza z następującego kodu:

//First, check for if we are on OS X so that it doesn't execute on 
//other platforms. Note that we are using contains() because it was 
//called Mac OS X before 10.8 and simply OS X afterwards 
if (System.getProperty("os.name").contains("OS X")){ 
    Application a = Application.getApplication(); 
    a.setOpenFileHandler(new OpenFilesHandler() { 

     @Override 
     public void openFiles(OpenFilesEvent e) { 
      for (File file : e.getFiles()){ 
       //Handle your file however you'd like 
      } 
     } 

    }); 
} 

Po wykonaniu tej czynności, Twoja aplikacja będzie obsługiwać zarówno pliki dokumentów, które były otwarte przed aplikacja została uruchomiona i po aplikacji została uruchomiona.