如何将路径从 "open with" 传递到由 install4j 创建的可执行文件?

How to pass a path from "open with" to an executable created by install4j?

我正在尝试使可执行文件(由 install4j 创建)能够使用文件上“打开方式”用户交互给出的路径。

在 macOS 上(其他平台应该也是如此 AFAIK),当一个人右键单击一个文件并选择“打开方式 -> 应用程序”时,应用程序将被启动并给出文件的路径作为论据。

我阅读了很多 install4j 教程,找到了很多与命令行相关的东西,但没有找到如何获得这个 运行。

目前,当我用创建的应用程序打开文件时,路径将被忽略。 当我通过命令行启动我的 Java 应用程序时,它工作正常。

知道要在 install4j 中设置什么才能使这项工作正常进行吗?

非常感谢。

编辑: 在 Ingo 的建议下,我将它添加到我的启动器 class,但不知何故它没有被调用:

        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);
        }

On macOS (same should be true for other platforms AFAIK), when one right- clicks a file and chooses "open with -> Application", the application will be fired up and the path to the file will be given as an argument.

macOS 上的应用程序包不是这种情况。你必须使用startup notification API。这也适用于 Windows 和 Linux 上的单实例模式,其中只有第一次调用会将文件路径作为参数传递给 main 方法。

启动侦听器 API 在后台使用 java.awt.Desktop.setOpenFileHandler,它仅在您注册文件关联时才有效。来自该方法的文档:

Please note that for Mac OS, notifications are only sent if the Java app is a bundled application, with a CFBundleDocumentTypes array present in its Info.plist.

有关为所有文件类型添加文件关联的方法,请参阅此博客post:

https://www.cocoanetics.com/2013/01/open-in-all-files/

在启动器向导中,在可执行信息-> macOS 选项下,您可以将任意片段添加到 Info.plist 文件。