带有CFBundleDocumentTypes的JavaApplicationStub

时间:2010-06-13 21:15:58

标签: java macos swt filehandler

我正在尝试使用CFBundleDocumentTypes将自定义文件扩展名与我的应用程序相关联。据我所知,这似乎“工作” - 当我双击该文件时,JavaApplicationStub启动我的应用程序。但是,我在java中设置的ApplicationListener事件没有注册回调。

我使用Set Default file association Mac OS X Java Package Maker Installer中列出的代码进行文件关联,文件关联本身看起来很好,但似乎是应用程序存根试图启动文件,因此失败了。

我将Apple ApplicatinListener代码添加到我的java应用程序中(类似于http://developer.apple.com/mac/library/documentation/Java/Reference/1.5.0/appledoc/api/index.html?com/apple/eawt/Application.html),但似乎我的应用程序没有得到回调。

代码类似于

Application.getApplication().addApplicationListener(
  new ApplicationAdapter() { 
    public void handleOpenFile(ApplicationEvent evt) {
      //some logging message here that I never get
    }
  }
);

我或许应该提到我也在使用SWT ......

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

这个问题并不是很具体,但有些事情会浮现在脑海中:

1)当您使用Apple的JavaApplicationStub时,启动过程的诊断输出可能如下所示:

$ export JAVA_LAUNCHER_VERBOSE
$ ./your.app/Contents/MacOS/JavaApplicationStub

2)您可以查看Apple的示例应用程序OSXAdapter,提及here

3)这是一个有效的example SWT / Java / Mac应用程序。

答案 1 :(得分:1)

很遗憾,您无法同时使用SWT和eAWT的ApplicationListener。见SWT bug。 SWT需要从JVM中的Apple进行更改,然后我必须更改SWT才能使用它。

但是,由于您对开放文件事件感兴趣,现在可以在所有平台的SWT中完全执行此操作。在3.6 SWT中,有一个新事件SWT.OpenDocument将在双击您的应用程序的文件时触发。请参阅此blog post并搜索“SWT.OpenDocument”。