command-line - 如何将路径从“打开方式”传递到由 install4j 创建的可执行文件?
问题描述
我正在尝试启用可执行文件(由 install4j 创建)以使用文件上的“打开方式”用户交互给出的路径。
在 macOS 上(对于其他平台 AFAIK 也应该如此),当右键单击文件并选择“使用 -> 应用程序打开”时,将启动应用程序并将文件的路径作为参数给出。
我阅读了很多 install4j 教程,找到了很多与命令行相关的东西,但没有找到如何运行它。
目前,当我使用创建的 App 打开文件时,路径将被忽略。当我通过命令行启动我的 Java 应用程序时,它工作正常。
有什么想法可以在 install4j 中设置以使其工作吗?
非常感谢。
编辑:在 Ingo 的建议之后,我将它添加到我的启动器类中,但不知何故它没有被调用:
public void start(Stage aPrimaryStage) {
StartupNotification.registerStartupListener(aPath -> {
logger.log("StartupListenerCalled: " + LocalDateTime.now());
try {
setFilesListToStageProperties(externalPathStringToFilesList(aPath), aPrimaryStage.getProperties());
}
catch (IOException e) {
showError(Thread.currentThread(), e);
}
});
logger.log("Application start: " + LocalDateTime.now());
super.start(aPrimaryStage);
}
解决方案
在 macOS 上(对于其他平台 AFAIK 也应该如此),当右键单击文件并选择“使用 -> 应用程序打开”时,将启动应用程序并将文件的路径作为参数给出。
macOS 上的应用程序包并非如此。您必须使用启动通知 API。这也适用于 Windows 和 Linux 上的单实例模式,其中只有第一次调用会将文件路径作为参数传递给 main 方法。
启动侦听器 APIjava.awt.Desktop.setOpenFileHandler
在后台使用,仅在您注册文件关联时才有效。从有关该方法的文档中:
请注意,对于 Mac OS,仅当 Java 应用程序是捆绑应用程序时才会发送通知,并且其 Info.plist 中存在 CFBundleDocumentTypes 数组。
有关为所有文件类型添加文件关联的方法,请参阅此博客文章:
https://www.cocoanetics.com/2013/01/open-in-all-files/
在启动器向导中,在 Executable info-> macOS options 下,您可以将任意片段添加到 Info.plist 文件中。
推荐阅读
- javascript - How to import a class method into a React class
- ios - 我是否必须更新我的 iphone(到最新版本)才能将其与最新版本的 xcode 连接?
- r - 在 r 中绘制拟合线
- php - 如何使用php codeigniter解析csv数据并插入数据库
- jquery - jquery css的负边距
- java - 发送密钥在 selenium java 中不起作用
- java - 注释未调用 AOP
- php - PHP发送邮件错误:标题必须是一个数组
- c++ - 如何在 wxWidgets 中使用多线程?
- java - bufferedWriter 是否需要 getter