我正在使用openjdk12和openjfx12构建一个简单的JavaFX应用程序。将应用程序捆绑为mac .app捆绑并将自定义文件类型与该应用程序关联后,该应用程序将永远不会收到打开文件的事件。
此功能/ api的实现经历了多次迭代,从com.apple.mrj
到com.apple.eio
,再到com.apple.eawt
和com.sun.glass.ui.Application
。为了支持api的最新版本java.awt.Desktop
,已弃用所有这些方法。但是,所有版本都有一个共同点:它们周围的信息极为匮乏。
在mac os上,应用程序将接收带有文件名的apple系统事件,而其他平台则通过控制台参数接收文件名。
要捕获此事件,当文件被双击,右键单击打开方式或拖动到应用程序顶部时,以下代码应足以触发该事件:
//...
static {
Desktop.getDesktop().setOpenFileHandler(event -> {
for (File file : event.getFiles()) {
// Handle file path
}
// Handle Search term optionally: event.getSearchTerm()
});
}
我无法以任何身份捕获此事件。 setOpenFileHandler
方法的文档指出:
请注意,对于macOS,仅当Java应用程序为捆绑应用程序且Info.plist中存在CFBundleDocumentTypes数组时,才发送通知。查看Apple开发者文档以获取有关Info.plist的更多信息。
我已经检查了Info.plist
个文件,并使用验证工具验证了它们是否正确。
其他用户报告说,如果该应用程序已经在运行并且打开了另一个文件,则会触发该事件,但是对我而言也并非如此。
通常,在jdk12上没有与此问题相关的搜索结果,并且存在的问题已有很长时间了。因此,我认为是时候创建一个新的课题,并希望对此有所启发。
非常感谢任何帮助/指针!