java - 程序未运行时 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]
解决方案
因此,问题在于,当您FileOpenHandler
在启动 fx 应用程序的类中定义 a 时FileOpenEvent
,只有在程序已经运行时才会抛出。因此,您应该创建一个不扩展的其他主类,并且Application
即使FileOpenEvent
应用程序仍在启动时也会正确抛出。
推荐阅读
- ruby-on-rails - 设计数据库rails多态的最佳方法
- dictionary - Clojure:在方法内更新地图
- packet-sniffers - 安装后如何运行scapy
- c - 运行时的以下 C 代码正在跳过某些信息的存储
- javascript - 视频约束面临模式未第二次切换
- java - 消息文本未出现在 Spring Boot JSON REST 错误响应中
- angular - 我们是否需要在 ES5 中编译代码以支持 Angular 9 中的 IE 11?
- spring-boot - @AllArgsConstructor 和 Spring 的构造函数注入:需要私有 final 吗?
- javascript - 比较 2 个嵌套 JSON 并突出显示它们的差异 Javascript
- forms - Vue Element UI - 默认 el-input-number 为空字段而不是数字