我有一个不使用Java-Stub的Java应用程序的OSX App-Bundle,而是一个Shellscript(通过Info.plist注册)。我还在Info.plist中注册了我的文件扩展名:
…
<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中注册文件打开Handler,通过将文件拖放到App-Icon上来打开文件(从Java 6更新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 );
}
}
} );
我的第一个问题是:此处理程序永远不会被命中 - 没有调试消息,文件也无法打开。
第二个问题可能是相关的:我可以双击相关文件,如果没有运行,应用程序将打开。由于我使用自定义shell脚本来启动应用程序,我认为我必须添加某种参数左右。首先,这是我的启动录:
#!/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 :(得分:0)
您不能使用shell脚本,AFAIK。打开的文件是使用AppleEvents发送的,而bash没有办法接收这些文件。