日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:35日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲一区二区三区不卡| 国产精品一区二区av交换| 精品久久久久中文字幕小说| 国产精品一区二区美女视频免费看 | 婷婷成人av| 91久久亚洲| 亚洲制服少妇| 一区二区三区国产盗摄| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产不卡av一区二区| 国产精品久久久久久久久妇女| 精品美女在线视频| 日产精品一区| 日韩视频在线一区二区三区 | 日韩精品社区| 国产女人18毛片水真多18精品| 国产欧美一区二区精品久久久| 免费在线亚洲欧美| www.com.cn成人| 亚洲少妇一区| 日本精品另类| 精品一区91| 伊人精品一区| 亚洲丝袜美腿一区| 欧美偷窥清纯综合图区| 久久97视频| 在线日韩av| 日韩影片在线观看| 美女久久久精品| 激情丁香综合| 午夜天堂精品久久久久| 国产精久久久| 99视频精品全部免费在线视频| 久久一二三区| 国产精品一区高清| 欧美日韩亚洲在线观看| 日韩精品久久久久久久软件91| 精品一区二区三区中文字幕视频| 久久免费黄色| 亚洲欧美网站| 国产精品一区二区三区av麻| 日本韩国欧美超级黄在线观看| 免费高清在线一区| 国模大尺度视频一区二区| 一级欧洲+日本+国产| 日本中文字幕一区二区| 亚洲黄色网址| 综合一区av| 首页国产精品| 亚洲综合婷婷| а√天堂中文在线资源8| 午夜在线视频一区二区区别| 国产精品白丝久久av网站| 日韩不卡在线| 日韩精品一区第一页| 美女免费视频一区| 久久国产99| 国产成人a视频高清在线观看| 久久午夜精品| 国产精品不卡| 日韩中文字幕不卡| 首页国产精品| 清纯唯美亚洲综合一区| 久久精品欧美一区| 国产精品一区二区免费福利视频| 五月天久久网站| 免费一级欧美片在线观看网站| 婷婷成人基地| 精品国产亚洲日本| 蜜桃久久av一区| 国产成人1区| 奇米狠狠一区二区三区| 欧美成人久久| 精品女同一区二区三区在线观看| 中文一区一区三区免费在线观| 午夜av不卡| 国产精品久久久久久妇女| 午夜在线视频观看日韩17c| 日韩毛片视频| 国产精品久久国产愉拍| 99亚洲视频| 天堂中文av在线资源库| 国产毛片一区二区三区| 久久都是精品| 欧美午夜精品一区二区三区电影| 国产乱人伦精品一区| 午夜在线精品| 久久精品青草| 国产精品黑丝在线播放| 国产精品一二| 日韩激情网站| 在线精品视频一区| 9色国产精品| 香蕉久久99| 在线观看精品| 四虎8848精品成人免费网站| 国产精品高清一区二区| 日韩国产精品久久久| 日韩影院在线观看| 欧美日韩精品免费观看视频完整| 国际精品欧美精品| 国产精品久久久久久妇女| 婷婷成人av| 一本综合精品| 丝袜诱惑制服诱惑色一区在线观看 | 精品国产中文字幕第一页| 日韩av资源网| 亚洲三区欧美一区国产二区| 国产视频一区在线观看一区免费| 久久精品成人| 亚洲国内欧美| 国内亚洲精品| 亚洲v在线看| 亚洲va在线| 欧美+亚洲+精品+三区| 99精品在线观看| 99精品视频精品精品视频| 久久精品国内一区二区三区水蜜桃| 日韩国产在线| 欧美日韩精品一区二区视频| 国产真实久久| 欧美日韩四区| 亚洲欧美日韩国产一区二区| 三级亚洲高清视频| 亚洲色图综合| 日韩一区二区三区精品| 亚洲精品进入| 日本不卡一区二区三区| 久久精品999| 美女在线视频一区| 福利一区在线| 国产精品字幕| 亚洲精品中文字幕乱码| 另类av一区二区| 日韩精品亚洲专区在线观看| 国产精品一区二区三区www| 欧美国产精品| 成人美女视频| 欧美久久精品一级c片| 免费日韩av| 91精品尤物| 国产一区二区三区成人欧美日韩在线观看| 精品一二三区| 成人免费网站www网站高清| 精品欧美久久| 亚洲深深色噜噜狠狠爱网站 | 日韩一区二区三区在线看| 91国内精品| 国产伊人久久| 蜜桃成人av| 婷婷视频一区二区三区| 美腿丝袜亚洲三区| 亚洲成人va| 国产美女精品| 91伊人久久| 日韩啪啪电影网| 欧美日韩四区| 欧美欧美黄在线二区| 国产66精品| 宅男噜噜噜66国产日韩在线观看| 日本aⅴ亚洲精品中文乱码| 国产一区二区三区四区二区| 1000部精品久久久久久久久| 亚洲人成亚洲精品| 精品国产一区二区三区噜噜噜| 欧美亚洲精品在线| 日韩黄色av| 伊人网在线播放| 三级欧美韩日大片在线看| 国产精品免费精品自在线观看| 日本精品不卡| 综合激情在线| 色一区二区三区四区| 蜜桃av一区| 福利在线一区| 亚洲精品一级| 美女福利一区二区三区| 在线观看视频免费一区二区三区| 老牛国内精品亚洲成av人片| 国产99精品一区| 欧美精品国产| 欧美日韩免费观看一区=区三区| 国产精品羞羞答答在线观看| 91精品一区国产高清在线gif| 日本成人手机在线| 亚洲不卡av不卡一区二区| 亚洲精品乱码| 日韩不卡免费高清视频| 欧美日韩a区| 午夜久久久久| 国产成人精品福利| 日韩精品一区二区三区中文字幕| 人人草在线视频| 欧美精品国产一区| 免费视频亚洲| 精品视频一区二区三区在线观看| 国产精品试看| 人人精品亚洲| 精品香蕉视频| 日本中文字幕一区二区视频|