电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

瀏覽:2日期:2024-08-26 14:19:06

1 概述

IDEA2020.1的文檔中提到只有JFX8的工程才支持打成jar包,并且,如果直接使用Build Artifacts的話,會如下提示:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

IDEA文檔有提到這個的解決辦法,是使用一些第三方工具。里面介紹了通過IDEA結合自身/Maven/Gradle打包發布JFX11以上版本的方法。但是,不足的地方有:

直接創建JFX工程默認只有一個src目錄,不像Maven工程還帶有resources與test,給管理資源文件以及外部依賴造成了困難,getClass().getResource()會出現空指針問題,但是好處是只需具備JDK環境,打包出來的文件能帶上jmods能跨平臺直接運行 直接創建Maven項目雖然是管理依賴以及資源文件方便,但是無論是直接通過Maven打出的jar包還是通過JavaFX Maven Plugins打出來的jar包默認綁定了開發平臺的JFX SDK,簡單地說就是Linux開發的JFX程序不能直接跑在具有JDK環境的Win上,因為用的是Linux的JFX SDK而不是Win的JFX SDK

因此,本文結合這兩者的優點,參照Maven的目錄管理,以JFX工程為基礎,記錄了從新建工程到發布跨平臺JFX應用的過程。

2 環境

IDEA 2020.1 OpenJDK 11 OpenJFX 11 Linux SDK OpenJFX 11 Linux/Windows/Mac OS X jmods

JDK安裝就不說了,JFX直接下載然后在工程中通過外部庫引入即可,三種jmods解壓出來即可,用于最后生成可執行文件時添加的模塊。下載鏈接戳這里。

3 新建JFX工程

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

這里的項目名為TestJFX,對應修改即可。

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

4 添加JFX11 SDK

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

添加上一步下載的對應平臺的JFX SDK。

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

5 添加module-info.java

在src目錄右鍵New->module-info.java,修改如下:

module TestJFX { requires javafx.fxml; requires javafx.controls; opens sample to javafx.fxml; exports sample;}

其中TestJFX為新建項目時的項目名,這個創建module-info.java時就默認加上了,sample為默認包,對應修改。

6 添加VM Options

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

添加

--module-path /usr/local/jfx/lib:out/production

其中

/usr/local/jfx/lib

為下載的JFX JDK的lib目錄,后面的out不需要更改,是默認的編譯輸出的目錄。

7 運行

這時候應該可以Shift+F10或者點擊綠色小三角運行了:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

當然內容是空的,因為什么也沒有加。

8 添加資源文件

默認的fxml是放在與Main類同一目錄下的,getResource()也沒有加路徑直接寫上文件名:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

但是這是src文件夾,放個fxml還勉強可以接受,放張圖片總不合適吧?所以,新建一個資源文件夾,把css,fxml什么的都放里面:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

直接在IDEA中移動fxml文件,Main中的引用路徑也自動更改,不得不說這個特性是真的好用,但遺憾的是,拋出了空指針異常。因此采取絕對路徑來進行讀取文件,通過URL+System.getProperty()指定絕對路徑:

@Overridepublic void start(Stage primaryStage) throws Exception{ String path = System.getProperty('user.dir'); URL fxmlUrl = new URL('file:'+path+'/resources/fxml/sample.fxml'); Parent root = FXMLLoader.load(fxmlUrl); primaryStage.setTitle('Hello World'); Scene scene = new Scene(root); scene.getStylesheets().add(new URL('file:'+path+'/resources/css/1.css').toString()); primaryStage.setScene(scene); primaryStage.show();}

其中

System.getProperty('user.dir')

獲取項目路徑,注意URL前面要加上“file:”,css的獲取也同理,只不過是需要轉換為String。

9 外部依賴

由于沒有了Maven管理依賴,所以外部依賴的管理會相對麻煩一點,基本上是以jar包的形式手動添加,這里以添加Gson為例,戳這里下載jar包,然后在項目目錄下新建一個lib文件夾,把jar包放進去:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

接著在項目結構中把整個lib文件夾添加到外部庫:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

然后VM Options中添加lib路徑,在上面的VM Options后面加一個冒號和lib就行:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

但是,此時可以IDEA還不能進行補全,最后需要修改module-info.java:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

加一行requires,此時IDEA能夠進行補全了,每個jar包都不同,對應修改即可。

10 制作跨平臺鏡像

運行沒問題之后就可以制作運行時鏡像發布了,終端進入項目根路徑:

jlink --module-path jmod/linux:out/production:lib --add-modules TestJFX --output linuxlinux/bin/java -m TestJFX/sample.Main

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

其中

jmod/linux

為開發平臺jmod的路徑,可以是絕對路徑,也可以是相對與項目根目錄的相對路徑,out/production與上面的VM Options保持一致。

--add-modules

后面跟的是模塊名,這是在生成module-info.java時指定的,為項目名。

--output

為輸出目錄。后一條命令中-m指定模塊名,后面跟包名+主類名。這樣linux平臺的鏡像就制作好了,Mac與Win的同理,只需要把jmod換成對應平臺的jmod即可,但是注意語法有一些差別,Mac的語法同Linux,只需要把jmod路徑換一下,但是注意需要整個工程在對應的平臺進行jlink:

jlink --module-path xxxxx/{MAC_JMOD}:out/production:lib --add-modules TestJFX --output macmac/bin/java -m TestJFX/sample.Main

Win的語法有些區別,一樣需要在Win下進行jlink:

jlink --module-path 'xxxxx/{WIN_JMOD};out/production' --add-modules TestJFX --output winwinbinjava -m TestJFX/sample.Main

下面是Win下的截圖:

詳解JFX11+IDEA跨平臺打包發布的完美解決辦法

11 demo

github

12 參考

Getting Started with JavaFX

到此這篇關于詳解JFX11+IDEA跨平臺打包發布的完美解決辦法的文章就介紹到這了,更多相關JFX11+IDEA跨平臺打包內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: IDEA
相關文章:
主站蜘蛛池模板: 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 软膜天花_软膜灯箱_首选乐创品牌_一站式天花软膜材料供应商! | 食安观察网| 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 咖啡加盟,咖啡店加盟连锁品牌-卡小逗 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 步进电机_agv电机_伺服马达-伺服轮毂电机-和利时电机 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | ORP控制器_ORP电极价格-上优泰百科 | 重庆中专|职高|技校招生-重庆中专招生网| 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 |