首页 > 解决方案 > 程序未运行时 Desktop.setOpenFileHandler 不起作用

问题描述

我正在为具有自己的文件扩展名的 mac 制作程序.edul。我让它工作了,所以当程序已经打开并且你打开文件时它会加载它,但是当我在程序还在运行时尝试这个时,我没有得到事件并且它不在 args 中。

我试图更改为,com.apple.eawt.Application但不幸java.desktop的是没有导出这个类,所以这不起作用。

Desktop desktop = Desktop.getDesktop();
desktop.setOpenFileHandler(e -> {
    try {
        FileWriter fileWriter = new FileWriter(System.getProperty("user.home") + "/Desktop/test.txt");
        fileWriter.write(e.getFiles().toString());
        fileWriter.close();
    } catch (IOException ignored) {
    }
});

所以我希望我的桌面上有一个文件,该文件具有我在程序运行之前打开的文件的位置,当它运行时我打开另一个文件,它也显示在我的桌面上。

所以在第一个文件打开后: [file/path/test.edul]

并在几秒钟内打开文件: [file/path/test2.edul]

我目前只得到: [file/path/test2.edul]

标签: javamacosjavafxfile-association

解决方案


因此,问题在于,当您FileOpenHandler在启动 fx 应用程序的类中定义 a 时FileOpenEvent,只有在程序已经运行时才会抛出。因此,您应该创建一个不扩展的其他主类,并且Application即使FileOpenEvent应用程序仍在启动时也会正确抛出。


推荐阅读