在 Mac OS X 中双击文档文件以打开 Java 应用程序
Posted
技术标签:
【中文标题】在 Mac OS X 中双击文档文件以打开 Java 应用程序【英文标题】:Double click document file in Mac OS X to open Java application 【发布时间】:2009-10-15 21:28:15 【问题描述】:我在应用程序包中有一个 Java 应用程序,我想将其与文件类型相关联。
例如,如果有一个文件
foo.example
当双击该文件或任何具有 .example 扩展名的文件时,我希望我的应用程序启动并打开该文件。我还希望文件具有我的应用程序的图标。
我想通过编辑 info.plist 文件来做到这一点,但它似乎不起作用。
另外,我的 Java 应用程序如何知道传递给它的文件是什么?
【问题讨论】:
伪答案:阅读文档。它在里面。 (不要只搜索 Java,而是一般的 Mac 开发。 任何特定的地方或链接?我一直在看文档,但似乎无法让它工作,一个例子会很好。 【参考方案1】:以下是需要做的事情:
第一部分:
首先,您必须进行设置,以便 OS X 知道 .example
扩展名应该与您的应用相关联。这是通过应用程序的 Info.plist 文件完成的,前提是您已经将 Java 代码捆绑到 .app
包中(有关如何执行此操作,请参阅其他问题)。
This example 准确地向您展示了要添加到 Info.plist 文件中的内容(请注意,尽管该示例适用于 ios,但它在 OS X 上的工作方式完全相同)。我不会复制它所说的内容,但简而言之,您必须添加两个键:
CFBundleDocumentTypes
:让 OS X 知道应用可以打开的文档类型
UTExportedTypeDeclarations
:向 OS X 告知此应用程序特定的自定义文档类型,在本例中为 .example
文件
请注意,有许多键,例如 CFBundleTypeExtensions
,它们的作用与上述键大致相同,但自 OS 10.5 起它们已被弃用,因此您不想使用它们以防 Apple 删除他们完全。
如果您添加了所有这些并且文件类型关联似乎不起作用,您可以尝试debug the problem using lsregister,这是一个可以让您知道任何问题的终端工具。如果返回没有错误,那么一切都应该设置好了。
第二部分:
现在 OS X 会在您双击以 .example
结尾的文件时打开您的应用程序,您必须让 Java 应用程序知道如何处理正在打开的文件。
您的应用将收到com.apple.eawt.AppEvent.OpenFilesEvent
类型的事件,您需要处理该事件。您可能会问自己如何处理在 Java 应用程序启动之前触发的事件,但似乎 Java 首先执行应用程序的 main 方法中的所有内容,然后触发该事件。所以在同一线程的 main 方法的某处,使用以下代码创建监听器:
//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
);
执行此操作后,您的应用将处理在您的应用启动之前和您的应用启动之后打开的文档文件。
【讨论】:
【参考方案2】:第一部分:
http://developer.apple.com/mac/library/DOCUMENTATION/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html
第二部分:
Java application doesn't know name of file being opened - Mac OS X
【讨论】:
以上是关于在 Mac OS X 中双击文档文件以打开 Java 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
php fopen 无法打开文件以在 Mac OS X 中写入