2010-06-13 28 views
1

我想使用CFBundleDocumentTypes將自定義文件擴展名與我的應用程序相關聯。據我所知,這似乎「工作」 - 當我雙擊文件時,JavaApplicationStub啓動我的應用程序。但是,沒有回調是通過在java中設置的ApplicationListener事件來註冊的。JavaApplicationStub與CFBundleDocumentTypes

我使用Set Default file association Mac OS X Java Package Maker Installer中列出的代碼來完成文件關聯,並且文件關聯本身顯示正常,但好像它是應用程序存根嘗試啓動文件並因此失敗。

我在我的java應用程序中添加了Apple ApplicatinListener代碼(類似於http://developer.apple.com/mac/library/documentation/Java/Reference/1.5.0/appledoc/api/index.html?com/apple/eawt/Application.html),但似乎並沒有我的應用程序獲得回調。

代碼類似於
Application.getApplicatin().addApplicationListener(
new ApplicationAdapter() {
public void handleOpenFile(ApplicationEvent evt) { //some logging message here that I never get}
});

我或許應該提,我還使用SWT ...

任何幫助,將不勝感激

回答

1

不幸的是,你不能同時使用SWT和eAWT的ApplicationListener。請參閱SWT bug。 SWT需要從JVM中的Apple進行更改,然後我必須更改SWT才能使用它。

由於您對開放文件事件感興趣,現在您可以在所有平臺上完全在SWT中執行此操作。在3.6 SWT中,有一個新事件SWT.OpenDocument,當您的應用程序的文件被雙擊時會觸發。請參閱此blog post並搜索「SWT.OpenDocument」。

1

這不是很具體到你的問題,但需要注意幾點:

1)當您使用Apple的JavaApplicationStub時,啓動過程的診斷輸出可能會獲得如下:

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

2)你可以看看蘋果的應用實例,OSXAdapter,提到here

3)這是一個SWT/Java/Mac應用程序的工作example

相關問題