本教程适用于JDK 8。本页面中描述的示例和实践不利用后续版本引入的改进,可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的概述,请参见Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参见JDK发行说明。
提供自包含应用程序的一个优点是能够设置文件关联。根据MIME类型或文件扩展名,可以将特定类型的文件与应用程序关联起来,以便使用您的应用程序打开关联的文件。例如,如果您的应用程序用于编辑文本文件,您可以设置一个文件关联,以便在用户双击具有扩展名.txt
的文件时运行您的应用程序。
文件关联演示程序读取JavaScript和Groovy代码。使用MIME类型和文件扩展名,将应用程序与JavaScript和Groovy文件关联起来。
您可以从自包含应用程序示例中下载文件关联演示的源文件。
生成自包含应用程序捆绑包的Ant任务在文件关联演示的build.xml
文件中。使用<fx:association>
Ant元素将文件扩展名或MIME类型与您的应用程序关联起来。Linux打包程序需要MIME类型,Windows打包程序需要文件扩展名,而OS X打包程序至少需要其中一个属性。最佳实践是使用这两个属性,将MIME类型和文件扩展名进行一对一映射,这样您就可以在多个平台上使用相同的构建文件。有关此元素的更多信息,请参见<fx:association>。
下面的代码显示了在fx:deploy
元素中包含的内容,用于将应用程序与扩展名.js
和.groovy
以及MIME类型text/javascript
和text/x-groovy
关联起来。
<fx:info title="文件关联演示" vendor="MySamples" description="Java打包器的文件关联演示" category="演示" license="3条款BSD"> <fx:association extension="js" mimetype="text/javascript" description="JavaScript源码"/> <fx:association extension="groovy" mimetype="text/x-groovy" description="Groovy源码"/> </fx:info>
如果打包程序不支持文件关联,则会忽略这些关联。从JDK的8u40版本开始,Windows EXE和MSI打包程序、Linux DEB和RPM打包程序以及Mac .app打包程序支持文件关联。OS X PKG和DMG打包程序通过使用Mac .app打包程序支持文件关联。
请参见build.xml
以获取完整的构建代码。
要生成File Association Demo的可安装包,请参见将现有应用程序转换为自包含应用程序中的“生成包”部分。
当自包含应用程序包安装在用户系统上时,安装程序会设置文件关联。安装完应用程序后,打开与应用程序关联的文件将启动应用程序。启动应用程序的操作取决于所在平台。
在Linux和Windows上,当根据文件关联启动应用程序时,正在打开的文件将作为参数传递给主类,该主类覆盖了类的默认参数。对于File Associations Demo,参数在启动应用程序实例后传递给loadscript
方法。每打开一个文件,都会启动一个新的应用程序实例。
请参见ScriptRunnerApplication.java
,了解Linux和Windows版本的代码。
在OS X上,只运行一个应用程序实例。当打开关联的文件时,会向应用程序发送一个事件。应用程序必须注册一个事件监听器来处理该事件。
File Association Demo for OS X有一个子类,其主方法与Linux和Windows版本不同。该主方法以与Linux和Windows版本相同的方式处理默认参数,然后向OS X注册FileOpenHandler
的监听器。当打开关联文件时,该监听器的事件方法被调用,并从OpenFilesEvent
对象的getFiles
方法中提取文件名。
请参见ScriptRunnerApplicationMac.java
,了解OS X版本的代码。
构建OS X版本的File Association Demo需要访问Oracle JDK附带的特定于OS X的类。大多数com.apple.eawt
类不包含在javac
编译器使用的符号文件中。为了告诉编译器忽略符号文件,将-XDignore.symbol.file=true
参数传递给构建文件中的-pre-init
Ant任务的javac
编译器。请参见build.xml
。
文件关联演示的项目包含应用程序的Java源文件,位于/src/sample/fa
目录中。自定义图标位于/src/package/平台
目录中。要与应用程序一起打包的示例文件位于/src
目录中。
为了处理Groovy代码,文件关联演示需要Groovy库。构建过程会将Groovy库下载到/lib
目录中。有关信息,请参见添加外部库。
JAR文件生成后,构建过程会将/src
和/lib
目录复制到/dist
目录中。然后,/dist
目录包含了应用程序的所有文件。
文件关联演示以文件名作为参数。如果通过打开关联的文件启动应用程序,则传递关联文件的名称。如果直接启动应用程序,则传递捆绑在应用程序中的示例文件sample.js
。有关信息,请参见提供默认参数。
设置文件关联需要管理员权限。默认情况下,Windows的EXE安装程序不会请求管理员权限。为了强制请求文件关联演示的管理员权限,将捆绑参数win.exe.systemWide
设置为true
。此设置表示执行系统范围的安装,需要管理员权限。
文件关联演示可在Linux、OS X和Windows上运行。该演示设置为使用单个构建文件,其中包含了所有平台的信息。有关信息,请参见使用通用构建文件的所有平台。
有关文件关联的更多信息,请参见将文件与自包含应用程序关联。
有关JavaFX Ant参数的更多信息,请参见JavaFX Ant任务参考。