最近写了一些JavaFX的程序,并将它们打包,过程中看了不少网上的博客与教程。对于开发经验不多的我来说,解决一个个问题无疑是一个很大的挑战,所幸最后在自己的努力和他人的帮助下完成了整个过程。鉴于JavaFX并非十分流行,如今网络上教程时效性也有很大问题,我写了这样一篇博客,来为准备使用JavaFX来开发程序的朋友们提供一些帮助。
注:该篇博客仅讲解创建、构建、打包JavaFX的项目的流程,由于JavaFX语法体系整体随时间变化不大,可以参考网络上的一些博客与视频教程。
Java 8:
因为JDK8中集成了JavaFX,所以在JDK8环境下创建JavaFX程序很简单。只需像创建普通Java项目一样创建项目,在代码中导入JavaFX相关包即可编写并直接运行即可运行JavaFX程序。
Java 8+:
在JDK8后的JDK版本不再集成JavaFX,我们需要自己向项目中引入JavaFX,所以创建JavaFX项目会复杂一些。
我们此处采用创建Maven或Gradle项目并引入依赖的办法来引入JavaFX。如果不使用Maven,也可以在Project Structure中通过给项目添加依赖的方式,来使用和运行JavaFX程序。但是此种方式不利于管理项目,在后续打包过程中也会遇到许多困难与问题,所以不推荐。
此处以Maven为例:
第一步:创建Maven项目
(关于Maven依赖和插件下载慢的问题,可以自行百度,将下载源改为国内镜像,并调整Maven设置。)
第二步:在pom.xml文件中添加如下代码,导入依赖。
<dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>19.0.2.1</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>19.0.2.1</version> </dependency></dependencies>
第三步:在pom.xml文件中添加如下代码,导入插件。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>19</source> <target>19</target> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <!-- Default configuration for running with: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass>这里填你的主类名称</mainClass> <launcher>app</launcher> <jlinkZipName>app</jlinkZipName> <jlinkImageName>app</jlinkImageName> <noManPages>true</noManPages> <stripDebug>true</stripDebug> <noHeaderFiles>true</noHeaderFiles> </configuration> </execution> </executions> </plugin> </plugins></build>
添加插件之后,可以看到右边的maven侧栏多出了选项。
此时我们创建一个入口类,
并将javafx-maven-plugin中的主类设置成该入口类。
设置完毕后,点击maven侧栏中plugin项下的javafx:run即可运行项目。
另外,高版本的idea支持一键创建maven包裹的JavaFX项目。
此种创建方式与上面的效果相同。
Java 8:
第一步:打开Project Structure设置界面,点击Artifacts,添加JavaFX Application。
第二步:在JavaFX一栏中的Application class中选择入口类,然后Apply设置。
第三步:点击Build,然后选择Build Artifacts,然后选择刚刚创建的Artifact,等待构建成功。
打包完毕后即可在out\artifacts中找到对应的jar文件。
Java 8+:
第一步:在pom.xml文件中添加以下代码,添加maven-shade-plugin。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>example</mainClass> </transformer> </transformers> </configuration> </execution> </executions></plugin>
第二步:重新加载maven设置,在mainClass标签中填入你的主类(以src/main/java文件夹为参照目录)
第三步:在maven侧栏中启动package。
此时,在项目文件夹中,会生成target文件夹,里面包含了所产生的jar文件。
当然,在Java 8+的JRE下无法运行该jar,因为Java 8+中已经不再集成JavaFX。若要直接运行,需要添加特定的VM Options,有兴趣的可以百度搜索一下。
第一种方法:使用exe4j将jar文件转成exe(Java 8以及Java 8+都适用)。
首先,准备好之前构建好的jar文件,以及编译所使用的jdk版本对应的jre或jdk本身,并将它们放在同一目录下。
第一步:下载、安装并打开exe4j。(过程就不过多赘述,相信各位利用互联网能轻松解决这个问题)
第二步:正确进行打包设置。
此处的license相信各位有办法解决,当然可以不添加license,不过这样打包出来的exe会有水印。
此处勾选第二个选项,以让没有JRE的使用者能正确运行程序。
此处设置应用名称与输出目录。
此处设置exe文件名。
此处单击加号,在弹出窗口中选择将被打包的jar文件,再在下方选择main class。
此处填入支持的最低与最高JRE版本号,然后点击高级选项中的search sequece。
如图,删除其中的所有内容并添加已准备好的并与jar文件放在同一文件夹下并与输出目录相同的文件夹相同的JDK或者JRE。以保持相对路径,使无Java环境与JavaFX依赖的使用者能正常使用项目。然后一直点击下一步,直至打包完成。
此处点击按钮可以测试打包出的exe是否可用。
测试可用后,即可将exe文件与JRE或JDK一同打包成zip或者exe安装文件。
注:此种方法打包,由于需要包含完整的JDK或JRE,在体积上具有劣势。可以通过定制JRE的方式进行解决,有兴趣的朋友们可以搜索一下方法。对于高版本来说,还有另一种打包方法,也可以避免这一劣势,如下。
第二种方法:使用javafx-maven-plugin中的jlink直接打包项目,再将其中的bat文件转换为exe文件(适用于Java 8+)。
第一步:在源码目录下添加module-info.java文件,内容如下:
module com.example.demo { requires javafx.controls; requires javafx.fxml; opens com.example.demo to javafx.fxml; exports com.example.demo;}
注意:此处的几个包名为程序入口类所在的包名,请确保入口类由至少一个包进行包裹。
第二步:在maven侧栏中点击javafx:jlink。
第三步:过程结束后,在target\app\bin中应该能找到一个叫做app.bat的批处理文件。
点击之后,应该能成功运行JavaFX程序。
之后,可以通过一些工具将bat文件转换为exe文件并添加图标,然后将应用程序打包或者制作成安装程序。此处就不过多赘述了,相信各位应该能够利用互联网自行解决。
以上即为Java 8与Java 8+版本中JavaFX项目的创建,构建,打包流程。以上步骤我均自己操作过一遍,如果发现问题,欢迎私信与我交流。其他关于JavaFX的问题也可以在私信中提出。如果这篇博客有帮到您,不要忘记点一个赞。
原网址: 访问
创建于: 2024-02-20 10:14:33
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论