当程序不是 运行 时,Desktop.setOpenFileHandler 不起作用
Desktop.setOpenFileHandler doesn't work when program isn't running
我正在为 mac 制作一个程序,它有自己的文件扩展名 .edul
。我让它工作,这样当程序已经打开并且你打开文件时它会加载它,但是当我在程序还没有 运行 时尝试这个时我没有得到事件并且它不在 args 中。
我试图更改为 com.apple.eawt.Application
,但不幸的是 java.desktop
没有导出这个 class,所以这没有用。
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]
所以,问题是,当您在 class 中定义一个 FileOpenHandler
来启动您的 fx 应用程序时,FileOpenEvent
仅在程序已经 运行.因此,您应该制作一个不扩展 Application
的另一个 main class,即使应用程序仍在启动,FileOpenEvent
也会正确抛出。
我正在为 mac 制作一个程序,它有自己的文件扩展名 .edul
。我让它工作,这样当程序已经打开并且你打开文件时它会加载它,但是当我在程序还没有 运行 时尝试这个时我没有得到事件并且它不在 args 中。
我试图更改为 com.apple.eawt.Application
,但不幸的是 java.desktop
没有导出这个 class,所以这没有用。
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]
所以,问题是,当您在 class 中定义一个 FileOpenHandler
来启动您的 fx 应用程序时,FileOpenEvent
仅在程序已经 运行.因此,您应该制作一个不扩展 Application
的另一个 main class,即使应用程序仍在启动,FileOpenEvent
也会正确抛出。