![将我自己制作的基于 Java 的文本编辑器设为 Windows 中的默认文本编辑器](https://linux22.com/image/1319614/%E5%B0%86%E6%88%91%E8%87%AA%E5%B7%B1%E5%88%B6%E4%BD%9C%E7%9A%84%E5%9F%BA%E4%BA%8E%20Java%20%E7%9A%84%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8%E8%AE%BE%E4%B8%BA%20Windows%20%E4%B8%AD%E7%9A%84%E9%BB%98%E8%AE%A4%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8.png)
我用 Java 创建了一个文本编辑器,我想将其设为默认文本编辑器。类似于 Windows,默认使用记事本作为编辑器,其图标显示在所有文本文件上,双击这些文件即可在记事本中打开它们。
我想实现将我的文本编辑器设为默认编辑器的相同任务。右键单击文本文件并选择我的文本编辑器作为打开文本文件的默认应用程序并不能解决问题,因为我的文本编辑器不会以这种方式接受文件输入。它只能通过 来接受文件输入FileChooser
。
Java 中是否有任何库可以通过这种方式实现接受文件输入的任务?
答案1
我已经制作了一个文本编辑器...想使其成为默认文本编辑器..
使用以下方式部署Java Web 启动并在启动文件中声明对相关文件类型的兴趣。
..仅接受由 FileChooser 输入的文件。
JWS 为 提供了感兴趣的文件名main(String[])
。我们可以File
从字符串创建一个并从那里获取它。下面是一个JNLP API 的演示FileService
表明对该文件格式感兴趣.zzz
。
答案2
如果您不想按照 Andrew 的建议使用 Java Web Start,并且想了解 Windows 如何具体处理默认应用程序,请参阅下面的快速指南:
当您“右键单击 -> 打开方式...”并将某个程序设置为默认应用程序时,将创建一个注册表值,HKEY_CLASSES_ROOT
其名称为“somefileextension_auto_file”,键名为“/shell/open/command”(因此,HKEY_CLASSES_ROOT\somefileextension_auto_file\shell\Open\command
)。此键的默认字符串值是双击某类型的文件时要执行的 shell 命令somefileextension
。创建的默认值类似于"c:\program files\somepath\test.exe" %1
其中 %1 将是一个变量,其中包含双击文件的完整路径。
如果您想要以编程方式使您的 jar 文件成为某个文件扩展名的默认应用程序,则需要创建HKEY_CLASSES_ROOT\somefileextension_auto_file\shell\Open\command
具有类似于以下内容的默认值的注册表项:
java -jar c:\somewhere\yourJarFile.jar %1
并且您的程序需要使用 where 来检测何时为其提供了命令行参数,其中public static void main(String[] args)
whereargs[1]
是单击的文件的路径。如果给出了命令行参数,您的程序应该自动尝试将其用作输入文件。
注意:这确实不应该需要手动完成,因为 Java 被设计为跨平台,因此存在跨平台解决方案(https://stackoverflow.com/tags/java-web-start/info)但问题作者似乎对 Windows 如何处理默认应用程序感兴趣。也许我会帮助其他读者。谁知道呢。