2011-03-31 50 views
1

对于不使用Java-Stub,而是使用Shellscript(通过Info.plist注册)的Java应用程序,我有一个OSX应用程序捆绑包。我也注册在我的Info.plist文件扩展名:使用JavaStub的OSX for Java应用程序捆绑软件的文件关联

… 
<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>My File Type Name</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
     <key>CFBundleTypeExtensions</key> 
     <array> 
      <string>ext1</string> 
      <string>ext2</string> 
     </array> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>CFBundleTypeMIMETypes</key> 
     <array> 
      <string>application/ext1</string> 
      <string>application/ext2</string> 
     </array> 
    </dict> 
</array> 
… 

这是需要什么有LaunchService认识我的文件和关联到我的计划。

就我所了解的Apple Devel文档而言,我现在需要在Java中注册文件open Handler以通过将文件拖到App-Icon上(如Java 6 update 3)来打开文件:

 Application.getApplication().setOpenFileHandler(new OpenFilesHandler() { 

      @Override 
      public void openFiles(OpenFilesEvent arg0) { 
       Debug.debug("Opening a bunch of files on osx."); 
       for(File file : arg0.getFiles()) { 
        Debug.debug("Opening: " + file.getAbsolutePath()); 
        // Custom open action 
        FileActions.openFile(file); 
       } 
      } 
     }); 

我的第一个问题是:这个处理程序永远不会被打 - 没有调试消息,文件将无法打开。

第二个问题可能是相关的:我可以双击关联的文件,如果没有运行,应用程序将打开。由于我正在使用自定义外壳脚本来启动应用程序,因此我想我必须添加某种参数。首先,这是我startscript:

#!/bin/bash 
BASEDIR=$(dirname "$0") 
cd "$BASEDIR/../Resources/Java/" 
java -Xdock:icon="../ico.icns" -Xmx256m -jar "core/myjar.jar" 

出于测试目的,我加了“$ 1”到我的参数列表 - $ 1是从系统的PSN ......我怎么会连文件打开到PSN的事件 - 或者是有另一种方式来做到这一点(使用自定义shell脚本)。

回答

0

您不能对此使用shell脚本AFAIK。打开的文件使用AppleEvents发送,而bash没有办法接收这些文件。

+0

但是,这并不解决/解释拖动文件到文件图标上的问题。 – gamma 2011-03-31 09:20:30

+0

当Finder想告诉应用程序打开某些文件时,无论是通过拖拽,双击,还是向应用程序发送一个AppleEvent(IPC的一种形式)。你的情况下的应用程序是shell脚本,但它不知道如何接收AppleEvents,所以他们只是坐在那里未处理。您需要一个知道如何接收它们并将它们传递给Java程序进行处理的可执行文件,可能是某种“Java存根”。 – LaC 2011-03-31 09:49:18

+0

好吧,我设法实现了JavaApplicationStub而不是shell脚本 - 将不得不做更多的改变,直到它的工作,但总体方向接缝没问题。 – gamma 2011-03-31 11:33:51

相关问题