如何将路径从 "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 文件。
我正在尝试使可执行文件(由 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 文件。