Java 12桌面应用程序从Mac OS丢失了OpenFileEvent

时间:2019-07-23 11:58:30

标签: java macos javafx desktop-application

我正在使用openjdk12和openjfx12构建一个简单的JavaFX应用程序。将应用程序捆绑为mac .app捆绑并将自定义文件类型与该应用程序关联后,该应用程序将永远不会收到打开文件的事件。

此功能/ api的实现经历了多次迭代,从com.apple.mrjcom.apple.eio,再到com.apple.eawtcom.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上没有与此问题相关的搜索结果,并且存在的问题已有很长时间了。因此,我认为是时候创建一个新的课题,并希望对此有所启发。

非常感谢任何帮助/指针!

0 个答案:

没有答案