2009-10-15 8 views
9

J'ai une application Java dans un ensemble d'applications avec lequel je veux associer un type de fichier.Double-cliquez sur le fichier document sous Mac OS X pour ouvrir l'application Java

Par exemple, s'il y a un fichier

foo.example

lorsque ce fichier, ou tout autre fichier avec l'extension .example, est double cliquée, je veux que mon application à démarrer et ouvrir le fichier . Je veux également que les fichiers aient l'icône de mon application.

Je voudrais faire cela en éditant le fichier info.plist, mais cela ne semble pas fonctionner.

En outre, comment mon application Java sait-elle quel fichier lui est transmis?

+0

Pseudo-réponse: lire les docs. C'est là. (Ne cherchez pas seulement Java mais le développement de Mac en général – JoePasq

+0

Un lieu ou un lien particulier? J'ai regardé les docs mais ne peux pas sembler le faire fonctionner, un exemple serait gentil. – steve

Répondre

4

Voici ce qui doit être fait:

Première partie:

Vous devez d'abord configurer les paramètres pour qu'OS X sache que l'extension .example doit être associée à votre application. Ceci est fait avec le fichier Info.plist de votre application, à condition que vous ayez déjà intégré votre code Java dans un paquet .app (voir les autres questions pour savoir comment faire).

This example vous montre exactement ce qu'il faut ajouter à votre fichier Info.plist (notez que bien que l'exemple soit pour iOS, il fonctionne exactement de la même manière sur OS X). Je ne vais pas répéter ce qu'il dit, mais en bref, vous devez ajouter deux clés:

  • CFBundleDocumentTypes: Lets OS X connaître le type de documents qui peut être ouvert par l'application
  • UTExportedTypeDeclarations: Raconte OS X sur le type de document personnalisé spécifique à cette application, qui dans ce cas est .example fichiers

Notez qu'il existe un certain nombre de clés telles que CFBundleTypeExtensions qui font la même chose que les clés ci-dessus, mais ils ont été désapprouvés depuis OS 10.5, vous ne voulez pas les utiliser au cas où Apple les supprime complètement.

Si vous ajoutez tout cela et que l'association de type de fichier ne semble pas fonctionner, vous pouvez essayer debug the problem using lsregister, un outil Terminal qui vous signalera tout problème. S'il revient sans erreur, tout devrait être configuré.

Deuxième partie:

Maintenant que OS X va ouvrir votre application lorsque vous double-cliquez sur un fichier se terminant par .example, vous devez laisser votre application Java savoir comment gérer le fichier en cours d'ouverture.

Votre application recevra un événement de type com.apple.eawt.AppEvent.OpenFilesEvent, que vous devrez gérer.Vous vous demandez peut-être comment gérer un événement déclenché avant même le démarrage de l'application Java, mais il semble que Java exécute tout d'abord tout dans la méthode principale de l'application, puis déclenche l'événement. Donc, quelque part dans la principale méthode sur le même thread, créez l'auditeur avec le code suivant:

//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 
      } 
     } 

    }); 
} 

Une fois que vous faites cela, votre application va gérer les fichiers de documents qui ont été ouverts avant votre application a été lancée et après votre application A été lancé.