JavaFX打包exe+Wind+Mac+Linux多平台分发等等
JavaFX打包exe+Wind+Mac+Linux多平台分发等等
由于此教程相对复杂,适合对java有一定掌握的同学操作,于是我又写了一篇用idea简单打包exe的教程,文章地址:https://blog.csdn.net/weixin_44480167/article/details/121374415
新手请访问上面的文章
如果使用java -jar xxx.jar一堆窗口不好看,分发不方便,我们可以使用packr
来打包exe,网上教打包exe的基本上都是用什么exe4j
麻烦还不知道干啥的,基本不成功!现在是2021年11月14日15:21:51
思路可以参考这篇文章:https://blog.csdn.net/weixin_44480167/article/details/120895260
下面我将一个简单javafx的demo打包成exe,若你想打包成mac、linux什么的可以按照我下面的思路试试,家境贫寒无法测试mac,若你成功了请告诉我,嘿嘿。
环境:jdk17 + javafx17
保姆式打包教程、保姆式打包教程、保姆式打包教程、
保姆式打包教程、保姆式打包教程、保姆式打包教程、
多图警告、多图警告、多图警告、
多图警告、多图警告、多图警告、
一、创建一个demo
你可以使用idea2021.2.x高版本创建一个demo,可参考文章:https://blog.csdn.net/weixin_44480167/article/details/121316802
这里我将使用普通的Maven项目,第一步肯定是依赖啦:
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>17.0.1</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-fxml</artifactId><version>17.0.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
编写一个:resources/fxml/fxml_demo.fxml
<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?><AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="209.0"prefWidth="250.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1"fx:controller="top.lingkang.FxmlController"><children><Button fx:id="btn" layoutX="46.0" layoutY="51.0" mnemonicParsing="false" text="获取当前时间"/><TextField fx:id="text" layoutX="46.0" layoutY="86.0"/><Label fx:id="lab" layoutX="46.0" layoutY="129.0" text="Label"/></children>
</AnchorPane>
编写一个controller
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;/*** @author lingkang* @date 2021/11/14*/
public class FxmlController implements Initializable {@FXML // 初始化时会自行绑定fxml里的id,注意变量命名=fxml里的idprivate Button btn;@FXML // 初始化时会自行绑定fxml里的id,注意变量命名=fxml里的idprivate TextField text;// 初始化时会自行绑定fxml里的id,注意变量命名=fxml里的idpublic Label lab;@Overridepublic void initialize(URL url, ResourceBundle resourceBundle) {// 添加初始化事件btn.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent actionEvent) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String date = format.format(new Date());// 将值赋予标签显示text.setText(date);lab.setText(date);}});}
}
编写启动入口main
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;import java.net.URL;/*** @author lingkang* @date 2021/11/14*/
public class FxmlDemo extends Application {@Overridepublic void start(Stage stage) throws Exception {// 获取 Maven 项目 resources/fxml/fxml_demo.fxml 注意,无法识别横向,例如 fxml-demo.fxmlURL resource = getClass().getResource("/fxml/fxml_demo.fxml");if (resource == null) {throw new RuntimeException("未找到fxml资源");}// 此时需要注意, fxml里最外层标签是 AnchorPane 故使用AnchorPane对象获取变量AnchorPane anchorPane = FXMLLoader.load(resource);// 将 AnchorPane 加入到场景stage.setScene(new Scene(anchorPane));stage.setTitle("openjfx17~");stage.show();}public static void main(String[] args) {launch(args);}
}
run启动失败:
二、配置一个openjfx17
我们知道,javafx已经在jdk11还是9、10哪个版本来着,将此作为独立的GUI维护,并推荐使用OpenJFX。OpenJFX的下载地址:https://openjfx.cn/dl/我这里下载17.0.1
的zip
版本。
将OpenJFX17解压到C:\Program Files\Java\javafx-sdk-17.0.1
,
配置idea的application启动,添加启动vm参数,将模块引入:
--module-path "C:\Program Files\Java\javafx-sdk-17.0.1\lib" --add-modules javafx.controls,javafx.fxml
再运行一次:
三、将javafx项目打包jar
我们先将javafx项目打包成运行的jar,javafx11+独立出了GUI,打包jar有点特殊,需要将dll也打包!
先创建一个启动入口,打成的jar从这里启动,不能直接从编写的FxmlDemo.main
启动!
package top.lingkang;/*** @author lingkang* @date 2021/11/14*/
public class App {public static void main(String[] args) {FxmlDemo.main(args);}
}
一定要先创建一个普通main去运行javafx的main
idea中 File》Proiect Structure》Libraries
1、先删除maven的依赖:
2、将openjfx的依赖添加进来:
3、按照第2步,将openjfx的window运行的dll库添加进来:
设置构建jar
选择启动类,上面新编写的App类
将dll添加进来:+ File
然后点OK,然后构建jar
Build
构建后运行这个jar
至此,javafx打包jar完毕!接下来是打包exe
那个警告是因为没有配置模块化module-info.java
,忽略他即可。
在java16以上可以模块化开发:module-info.java
,用idea2021.2.x直接初始化javafx项目就自动生成这个src/main/java/module-info.java
,内容大概如下:
module top.lingkang.demo {requires javafx.controls;requires javafx.fxml;opens top.lingkang.demo to javafx.fxml;exports top.lingkang.demo;
}
四、packr打包exe
packr是可以多平台打包分发,所以我不算标题党,这里我只显示了win打包,因为家境贫寒Mac测试不了,你也可以寄一台Mac给我打包试试。
packr下载:https://github.com/libgdx/packr
下载好packr-all-4.0.0.jar
下载一个openjdk17,我在清华大学镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/
Index of /AdoptOpenJDK/17/jdk/x64/windows/
将他们放一起
编写一个my-packr-config.json
{"platform": "windows64","jdk": "./OpenJDK17U-jdk_x64_windows_hotspot_17.0.1_12.zip","executable": "javaFX-demo","classpath": ["demo2.jar"],"mainclass": "top.lingkang.App","vmargs": ["Xms32m","Xmx512m"],"minimizejre": "soft","output": "out-windows64"
}
若出现中文乱码可考虑在json的vmargs中添加"Dfile.encoding=utf-8"
cmd执行构建,
java -jar packr-all-4.0.0.jar my-packr-config.json
# 或者
java -jar -Dfile.encoding=utf-8 packr-all-4.0.0.jar my-packr-config.json
等待完成!
运行exe
没设置图标,嘿嘿!
压缩后大小有200多MB,如果选用java11的话估计在100MB以内,这里我提供一些大小压缩思路,例如将openjfx的dll直接放到openjdk17中,将减少jar的打包大小,当然啦,也有可能是packr-all-4.0.0.jar
未支持jdk17,所有将整个openjdk17的jre放进去了,未实现删减!!那我们只能等等党,或者降低jdk版本啦!
若运行exe无任何事情发生,可以cmd运行 xxx.exe查看控制台输出的错误,根据错误解决。
上面的错误就是jar打包后无法识别resources的资源,可以考虑独立拿出fxml,调用时调用当前目录下的fxml/xxx.fxml。。或者使用压缩软件打开jar,调整目录位置。个人更推荐加载外部资源。。
五、一件三连
创作不易,写文章也花长时间,你觉得对你有帮助请给我点个赞!一健三连…谢谢啦!
创作不易,写文章也花长时间,你觉得对你有帮助请给我点个赞!一健三连…谢谢啦!
创作不易,写文章也花长时间,你觉得对你有帮助请给我点个赞!一健三连…谢谢啦!
你的点赞就是我的动力
你的点赞就是我的动力
你的点赞就是我的动力
JavaFX打包exe+Wind+Mac+Linux多平台分发等等相关推荐
- dgen模拟器 linux,game_box: GameBox 是一款游戏家用机模拟器,本项目基于Qt,可在windous\mac\linux等多平台使用。...
game box 概述 GameBox是一款游戏家用机模拟器,本项目基于Qt,可在windous\mac\linux等多平台使用.由于本项目基于多种开源代码开发而成,强烈提醒注意license说明. ...
- Py打包应用程序(zipapp打包.pyz文件、pyinstaller打包exe文件)
''' Py打包应用程序.py (zipapp打包.pyz文件.pyinstaller打包exe文件)注意: 一.zipapp模块 打包档案包 的 命令行语法: python -m zipapp so ...
- 使用纯 python 实现 Instruments 协议,跨平台 (win,mac,linux) 获取 iOS 性能数据
原文由YueChen发表于TesterHome社区网站,点击原文链接可与YueChen交流. 前言 获取 iOS 性能数据,一直都是比较麻烦的事情,之前在构建测试框架&平台的时候,获取 iOS ...
- 好用的python打包软件_Python打包exe文件方法汇总【4种】
title: Python打包exe文件方法 copyright: true top: 0 date: 2018-08-11 21:08:21 tags: 打包 categories: Python进 ...
- java打包exe实例(使用javapackager)
javapackager是jdk1.7后自带的一个打包工具,可以生成本地exe安装包. 接下来以一个例子说明如何使用. 首先生成常规jar文件,关于如何生成jar文件这里就不细说了.我这里是使用gra ...
- pythonweb项目打包_用python打包exe应用程序
1.PyInstaller简介 PyInstaller是一个跨平台的Python应用打包工具 支持 Windows/Linux/MacOS三大主流平台 能够把 Python 脚本及其所在的 Pytho ...
- python + uiautomator2编译平板语言工具并切换打包exe可执行文件
python + uiautomator2编译平板语言工具并切换打包exe可执行文件 初版: 在命令行输入 adb shell am monitor 2.点击打开要获取包名的应用 3.在命令行则会显示 ...
- BesLyric 全新版本下载 ( windows \ mac \ linux )
导读 BesLyric , 一款专门制作 网易云音乐 LRC 滚动歌词的软件! 搜索.下载.制作 歌词更方便! 很荣幸地,自 beslyric 2017 年开发推出以来,得到了很多云村村民的肯定,现在 ...
- pyinstaller打包exe程序教程推荐及需要注意的点
Python PyInstaller安装和使用教程(详解版) http://c.biancheng.net/view/2690.html 1.pyinstaller打包程序中出错是正常的,报错要注意看 ...
最新文章
- 父域与子域之的信任关系
- 关于(警告: No configuration found for the specified action)解决方案
- java 软引用_Java中弱引用和软引用的区别以及虚引用和强引用介绍
- springboot tomcat配置_告诉你,Spring Boot 真是个牛逼货!
- linux分析字节序的分类及特点,计算机中的字节序详解 分类: 【Linux/Windows操作系统】 2015-01-07 21:54 97人阅读 评论(0) 收藏...
- matlab平面抛射方程,MATLAB 数学实验 第七章 微分方程与计算机模拟 PPT注记
- 包含min函数的栈 python_面试题_设计包含 min函数的栈
- science量子计算机,第一快讯|《Science》量子计算机被证明超越了经典计算机
- excel 表生成insert语句。
- 分布式实时日志分析解决方案 ELK 部署架构
- win10如何关闭F1~F12快捷键?
- http的response遇到illegalstateexception解决办法
- 谷歌翻译失败解决方案
- 『Kubernetes』Linux安装K8S集群过程笔记
- 如何用安装启动盘启动计算机,U大师U盘启动盘制作教程 详细图解步骤教你怎么装系统(老机版)...
- pip.ini的建立
- HR管理系统的五大选择特点
- 计算机专业会计基础教材,《会计》会计学-教材.pdf
- *grep -F/f的作用*
- 7大赚钱思维,句句灼心!