Windows下的JavaFX桌面应用程序打包ABC
Windows下的JAVAFX桌面应用程序打包ABC
目录
- Windows下的JAVAFX桌面应用程序打包ABC
- 谁会读这个文章
- 写作的目标
- 知识背景
- JavaFx
- 模块化Java
- JavaFX打包的例子
- 例子代码
- 编译的命令行
- 设置变量
- 编译Java代码
- 运行
- ``jlink``生成自定义运行时映像
- ``jpackage``打包
谁会读这个文章
- 自学使用Java开发桌面程序的初学者(为什么要这么做?);
- 要迅速撸出一个压缩包百兆以下windows应用程序的初级程序员;
- 大部分梯子都是java的程序员,客户只能接受Windows、只能接受单机传统桌面应用;
- 无聊的大佬想要给别人(也就是我)一个成长的机会(谢谢!)。
写作的目标
- 把自己在此处躺的坑记录下来以后回顾;
- 弄一个外部记忆防止自己老年痴呆。
知识背景
JavaFx
官方网站:openjfx
“JavaFX是一个开源的下一代客户端应用平台,用于桌面、移动和嵌入式系统,建立在Java之上。它是由许多个人和公司合作完成的,目标是为开发丰富的客户端应用程序制作一个现代、高效和功能齐全的工具包。”
总之,JavaFX挺愉快,也是开源的。是不是下一代就很那说,也可能就是上一代中没火也没挂的那种。
倒是我最近把它捡起来之后发现,随便写点界面发布一个小应用程序(压缩包二十兆左右)不要太愉快。
- 采用Kotlin开发,
- 不去用webkit,
- 不去用FXML,
- 把数据模型分开放数据可视化模型放在object里面。
模块化Java
参考:Jakob Jenkov博客文章
Java模块是一种打包机制,它使你能够将一个Java应用程序或Java API打包成一个单独的Java模块。一个Java模块被打包成一个模块化的JAR文件。一个Java模块可以指定它包含的哪些Java包应该对使用这个模块的其他Java模块可见。一个Java模块还必须指定哪些其他Java模块来完成它的工作。
Java模块是Java 9中通过Java平台模块系统(JPMS)的一项新功能。
模块化Java有很多优点:
- 通过模块化Java平台的小型应用分发
- 内部包的封装
- 启动时检测缺失的模块
最重要的也就是:“在Java 9和Java平台模块系统之前,你不得不把所有的Java平台API和你的Java应用打包在一起,因为没有正式的方法可以可靠地检查你的Java应用使用了哪些类。由于Java平台的API在这些年里已经变得相当庞大,你的应用程序会得到大量的Java类,其中许多你的应用程序可能不会使用。”
而采用了新的系统之后呢?打包出来的Java应用程序就再也不会那么大。一个典型的JavaFX应用程序,压缩包的大小也就是刚刚超过20M这种量级。
当然,最新版本的JavaFX也是模块化的。包括7个jmod文件。
- javafx.base.jmod
- javafx.controls.jmod
- javafx.fxml.jmod
- javafx.graphics.jmod
- javafx.media.jmod
- javafx.swing.jmod
- javafx.web.jmod
下载JavaFX的时候,有三个下载项。
- SDK
- jmods
- Monocle SDK
SDK就是我们编译和运行的时候所需要的dll、jar文件;jmods就是我们模块化打包时需要的;Monocle SDK针对那些没有底层窗口系统的情况,例如手持设备等等。
我们把SDK和jmods下载了解压在硬盘上。下面要用到。
JavaFX打包的例子
例子代码
官方网站的例子:HelloFX.java
这是一个很无聊的例子,显示一个 640 × 480 640\times 480 640×480的窗口,窗口正中是一个标签,显示Java和JavaFX的版本。
package hellofx;import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;public class HelloFX extends Application {@Overridepublic void start(Stage stage) {String javaVersion = System.getProperty("java.version");String javafxVersion = System.getProperty("javafx.version");Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");Scene scene = new Scene(new StackPane(l), 640, 480);stage.setScene(scene);stage.show();}public static void main(String[] args) {launch();}}
程序在包hellofx
中,src
目录下包括一个文件module-info.java
和包对应的目录。
module hellofx {requires javafx.controls;exports hellofx;
}
编译的命令行
在此之前,我们要确认Java是否在路径上;JavaFX SDK和jmods是否已经解压完成。此时我们打开的终端当前目录下有一个文件夹src
,文件夹里是module-info.java
和hellofx
文件夹(文件夹里就是HelloFX.java
)。
设置变量
首先,我们设置JavaFX的库文件地址和jmods文件地址。
set FX="D:\javafx-sdk-17.0.1\lib"
set FX_MODS="D:\javafx-sdk-17.0.1\javafx-jmods-17.0.1"
编译Java代码
下面的命令按顺序执行三个命令:
- 把
src
目录下(包含子目录)所有的java文件的绝对地址输出到sources.txt
中; - 执行Java编译器,输出在
mods/hellofx
目录中,增加模块地址JavaFX的jar文件地址 - 删除
sources.txt
dir /s /b src\*.java > sources.txt & javac --module-path %FX% -d mods/hellofx @sources.txt & del sources.txt
执行完之后,当前目录下面增加一个mods
目录,该目录下有一个hellofx
目录为模块的名字;模块下是module-info.class
和包目录hellofx
(包含其中的HelloFX.class
)。
运行
此时,只需要把JavaFx对应的库文件地址加入到module-path
就可以运行。
java --module-path "%FX%;mods" -m hellofx/hellofx.HelloFX
jlink
生成自定义运行时映像
对一个模块化的项目,可以用jlink
来创建一个使用JavaFX jmods的自定义运行时映像。
jlink --module-path "%FX_MODS%;mods" --add-modules hellofx --output hellofx
如此,就在目录hellofx
下面生成了一个定制化的运行时镜像,可以通过这样来运行程序。
hellofx\bin\java.exe hellofx.HelloFX
jpackage
打包
jpackage
命令可以生成一个包装好的应用程序。
jpackage -n hellofx-pack --module-path "%FX_MODS%;mods" -m hellofx/hellofx.HelloFX -t app-image
查看hellofx-pack
下面,可就可以运行hellofx-pack.exe
。
Windows下的JavaFX桌面应用程序打包ABC相关推荐
- Windows下tomcat进程监控批处理程序
在Windows下tomcat进程监控批处理程序脚本如下: @echo off ::tomcat安装目录 set _tomcatDir=E:\myFiles\apache-tomcat-8.5.31 ...
- 【C#】VS2017桌面应用程序打包成.msi或者.exe
1.安装打包插件:Microsoft Visual Studio 2017 Installer Projects 打开vs2017 ,选择 工具 --> 扩展和更新 --> 联机,搜索Mi ...
- linux远程windows无法输入,XRDP在Windows下用远程桌面连接,键盘失效有关问题
XRDP在Windows下用远程桌面连接,键盘失效问题 很久没上这个博客了,最近在做虚拟化方面的东西,有个需求是通过windows远程连接Linux桌面,采用的是xrdp.安装和使用xrdp都比较容易 ...
- Windows下的多桌面管理器
Microsoft公司提供了在Windows下的多桌面管理器,羡慕Linux的多桌面的同学们,可以一试. 这个多桌面管理器是作为 Windows PowerToys 的一部分,放在微软网站上的. go ...
- windows下的eclipse运行hdfs程序时报错 (null) entry in command string: null chmod 0644【笔记自用】
运行下面代码时,报了 (null) entry in command string: null chmod 0644 解决方案 下载hadoop.dll文件 并拷贝到C:\windows\system ...
- VS2017桌面应用程序打包成.msi或者.exe
1.安装打包插件:Microsoft Visual Studio 2017 Installer Projects 打开vs2017 ,选择 工具 --> 扩展和更新 --> 联机,搜索Mi ...
- Win-Get——Windows下的自由软件自动安装程序
来源:Solidot 在Linux上,可以方便的通过apt-get来获得软件.现在Windows专用的Win-Get-- 一个免费的命令行自动安装程序,可以在"视窗"系统上实现相同 ...
- 使用Windows服务启动C#桌面应用程序问题解决
一.背景 为了实现Windows应用程序开机自启动,使用了Windows服务技术后台运行.这里遇到了以下问题 二.问题点及解决 1.使用Process.start()出现不生效问题. 现象:启动服务后 ...
- vs2017c语言程序打包,VS2017桌面应用程序打包成.msi或者.exe
1.安装打包插件:Microsoft Visual Studio 2017 Installer Projects 打开vs2017 ,选择 工具 --> 扩展和更新 --> 联机,搜索Mi ...
最新文章
- python中filenotfounderror_Python3 报错 FileNotFoundError: [WinError 2]
- .NET 中 Image 转 Icon
- OptiTrack专为VR主题公园推出了主动追踪方案,可降低40%成本
- Windows Mobile常用程序代码(串口、图象、网络、3D、数据库、音频视频等等)
- wxWidgets:wxFTP类用法
- gridview中如果文字太多指点要显示的文字
- 使用Microsoft Word2016无法正常对Latex文本转换的踩坑和解决方法
- C++类属性swap
- 索引sql server_SQL Server索引设计基础和准则
- Wherehows项目简介
- getshell工具下载批量ecshop4.0全版本通杀工具下载
- 软考高级系统架构设计师总结
- jpeg图片格式详解
- java pdf 富文本_富文本编辑器保存的html内容使用itextpdf转PDF文件(css提取,内容重叠)问题解决...
- android-自定义ImageView-圆形图片绘制代码详解
- outlook附件无法打开_通过键盘在Outlook 2007中打开附件
- 华为开发者大会2020开幕,发布多项新开发者技术及系统
- 第四篇 EAS系统项目框架搭建
- World Cup Betting(PAT)
- 下列不是HTML网页开发工具的是,网页开发工具有哪些