最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年06月30日 11:30:50   作者:不是所有的牛奶都叫特侖蘇  
這篇文章主要介紹了詳解JFX11+IDEA跨平臺打包發(fā)布的完美解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1 概述

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


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

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

因此,本文結(jié)合這兩者的優(yōu)點(diǎn),參照Maven的目錄管理,以JFX工程為基礎(chǔ),記錄了從新建工程到發(fā)布跨平臺JFX應(yīng)用的過程。

2 環(huán)境

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

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

3 新建JFX工程


這里的項(xiàng)目名為TestJFX,對應(yīng)修改即可。

4 添加JFX11 SDK


添加上一步下載的對應(yīng)平臺的JFX SDK。

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為新建項(xiàng)目時(shí)的項(xiàng)目名,這個(gè)創(chuàng)建module-info.java時(shí)就默認(rèn)加上了,sample為默認(rèn)包,對應(yīng)修改。

6 添加VM Options


添加

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

其中

/usr/local/jfx/lib

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

7 運(yùn)行

這時(shí)候應(yīng)該可以Shift+F10或者點(diǎn)擊綠色小三角運(yùn)行了:


當(dāng)然內(nèi)容是空的,因?yàn)槭裁匆矝]有加。

8 添加資源文件

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


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


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

@Override
public 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")

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

9 外部依賴

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


接著在項(xiàng)目結(jié)構(gòu)中把整個(gè)lib文件夾添加到外部庫:


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


但是,此時(shí)可以IDEA還不能進(jìn)行補(bǔ)全,最后需要修改module-info.java:


加一行requires,此時(shí)IDEA能夠進(jìn)行補(bǔ)全了,每個(gè)jar包都不同,對應(yīng)修改即可。

10 制作跨平臺鏡像

運(yùn)行沒問題之后就可以制作運(yùn)行時(shí)鏡像發(fā)布了,終端進(jìn)入項(xiàng)目根路徑:

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


其中

jmod/linux

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

--add-modules

后面跟的是模塊名,這是在生成module-info.java時(shí)指定的,為項(xiàng)目名。

--output

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

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

Win的語法有些區(qū)別,一樣需要在Win下進(jìn)行jlink:

jlink --module-path "xxxxx/{WIN_JMOD};out/production" --add-modules TestJFX --output win
win\bin\java -m TestJFX/sample.Main

下面是Win下的截圖:

11 demo

github

12 參考

Getting Started with JavaFX

到此這篇關(guān)于詳解JFX11+IDEA跨平臺打包發(fā)布的完美解決辦法的文章就介紹到這了,更多相關(guān)JFX11+IDEA跨平臺打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 開發(fā)中網(wǎng)絡(luò)編程之IP、URL詳解及實(shí)例代碼

    java 開發(fā)中網(wǎng)絡(luò)編程之IP、URL詳解及實(shí)例代碼

    這篇文章主要介紹了java 開發(fā)中網(wǎng)絡(luò)編程之IP、URL詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 多用多學(xué)之Java中的Set,List,Map詳解

    多用多學(xué)之Java中的Set,List,Map詳解

    下面小編就為大家?guī)硪黄嘤枚鄬W(xué)之Java中的Set,List,Map詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Spring MVC整合Kaptcha的具體使用

    Spring MVC整合Kaptcha的具體使用

    Kaptcha 是一個(gè)可高度配置的實(shí)用驗(yàn)證碼生成工具,本文主要介紹了Spring MVC整合Kaptcha的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java 策略模式與模板方法模式相關(guān)總結(jié)

    Java 策略模式與模板方法模式相關(guān)總結(jié)

    這篇文章主要介紹了Java 策略模式與模板方法模式相關(guān)總結(jié),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • kaptcha驗(yàn)證碼組件使用簡介解析

    kaptcha驗(yàn)證碼組件使用簡介解析

    這篇文章主要介紹了kaptcha驗(yàn)證碼組件使用簡介解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • SpringBoot實(shí)現(xiàn)文件下載的四種方式

    SpringBoot實(shí)現(xiàn)文件下載的四種方式

    本文主要介紹了SpringBoot實(shí)現(xiàn)文件下載的四種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • spring-spring容器中bean知識點(diǎn)總結(jié)

    spring-spring容器中bean知識點(diǎn)總結(jié)

    在本篇文章里小編給大家分享了關(guān)于spring-spring容器中bean知識點(diǎn)總結(jié),有需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • SpringBoot框架底層原理解析

    SpringBoot框架底層原理解析

    這篇文章主要介紹了SpringBoot底層原理,包括配置優(yōu)先級的配置方式給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • 基于Java解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換?

    基于Java解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換?

    這篇文章主要介紹了基于Java解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換,文章舉例說明圍繞文章主題展開相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-02-02
  • 深入了解JAVA Jersey框架

    深入了解JAVA Jersey框架

    這篇文章主要介紹了JAVA Jersey的概念以及使用方法,文中講解非常詳細(xì),對大家的學(xué)習(xí)工作有所幫助,感興趣的朋友可以參考下
    2020-06-06

最新評論

青河县| 绍兴县| 乌鲁木齐市| 金门县| 商洛市| 肇源县| 桂平市| 佛山市| 盖州市| 常宁市| 刚察县| 鄂托克旗| 明星| 公安县| 宝山区| 呼伦贝尔市| 陕西省| 开封市| 修水县| 镇坪县| 原阳县| 洛南县| 敖汉旗| 普格县| 永平县| 鄂州市| 潮安县| 琼中| 门头沟区| 顺昌县| 红安县| 永修县| 开原市| 女性| 阿拉善盟| 长泰县| 宕昌县| 班戈县| 定陶县| 金寨县| 淮阳县|