程序未运行时,Desktop.setOpenFileHandler不起作用

时间:2019-01-07 20:38:07

标签: java macos javafx file-association

我正在为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]

1 个答案:

答案 0 :(得分:0)

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