首页 > 解决方案 > 如何将路径从“打开方式”传递到由 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);
        }

标签: command-lineinstall4j

解决方案


在 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 文件中。


推荐阅读