翻譯|使用教程|編輯:鮑佳佳|2021-01-25 10:34:08.080|閱讀 381 次
概述:在過(guò)去的六年里,我一直在我的一些演示應(yīng)用程序中使用JavaFX,我了解到的一件事是,它是一個(gè)移動(dòng)的目標(biāo),特別是在Java 11中JavaFX被從JDK中移除之后。我想知道的是,目前創(chuàng)建一個(gè)新的JavaFX應(yīng)用程序的最佳方法是什么,以及如何從IntelliJ IDEA內(nèi)部運(yùn)行它?
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷售中 >>
在過(guò)去的六年里,我一直在我的一些演示應(yīng)用程序中使用JavaFX,我了解到的一件事是,它是一個(gè)移動(dòng)的目標(biāo),特別是在Java 11中JavaFX被從JDK中移除之后。我想知道的是,目前創(chuàng)建一個(gè)新的JavaFX應(yīng)用程序的最佳方法是什么,以及如何從IntelliJ IDEA內(nèi)部運(yùn)行它?
構(gòu)建工具和JavaFX
JavaFX并不像你在應(yīng)用中可能使用的其他庫(kù)那樣簡(jiǎn)單依賴。我們不能在Maven或Gradle文件中添加一個(gè)新的依賴關(guān)系,然后直接開(kāi)始使用它,這主要是因?yàn)閁I框架比其他類型的框架更依賴于你的操作系統(tǒng)。這主要是因?yàn)閁I框架比其他類型的框架更依賴于你的操作系統(tǒng),所以構(gòu)建工具需要為你的操作系統(tǒng)引入正確的依賴關(guān)系。
在我的JavaFX應(yīng)用中使用過(guò)Maven和Gradle,我看到了這兩種工具所采取的方法。由于這兩個(gè)構(gòu)建工具都很流行,所以我想把它們都介紹一下。
使用Java模塊系統(tǒng)
如果你想要與IntelliJ IDEA、JavaFX和Gradle一起工作的無(wú)縫體驗(yàn),并且你可以自由地做出所有的架構(gòu)決策,可以嘗試使用Java的模塊系統(tǒng)(在Java 9中引入)創(chuàng)建一個(gè)模塊化的應(yīng)用程序。對(duì)像我們?cè)谶@里編寫(xiě)的演示應(yīng)用這樣的小應(yīng)用來(lái)說(shuō),唯一真正影響的是一個(gè)額外的文件,模塊-info.java。
在使用模塊時(shí)有很多微妙的地方,我在這個(gè)例子中不會(huì)涉及。最主要的是,你需要注意的是,模塊化應(yīng)用使用的是模塊路徑,而不是我們熟知和喜愛(ài)的classpath。
OpenJFX入門(mén)文檔介紹了如何創(chuàng)建這樣的應(yīng)用程序(按照菜單項(xiàng) "JavaFX和IntelliJ"->"Gradle模塊化")。
然而,如果你使用的是Gradle 6.7或以上版本(如果你從IntelliJ IDEA 2020.3創(chuàng)建了一個(gè)Gradle應(yīng)用程序,就會(huì)是這樣),JavaFX Gradle Plugin(0.0.9版本)就不能做所需的事情,因?yàn)镚radle改變了它構(gòu)建使用Java模塊系統(tǒng)的應(yīng)用程序的方式。你需要把你的build.gradle文件改成類似的樣子。
plugins { id 'application' } group 'com.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } def javaFXPlatform = getJavaFXPlatform() def javaFXVersion = "15.0.1" dependencies { // you need a dependency for each of the JavaFX modules you're going to use implementation "org.openjfx:javafx-base:${javaFXVersion}:${javaFXPlatform}" implementation "org.openjfx:javafx-controls:${javaFXVersion}:${javaFXPlatform}" implementation "org.openjfx:javafx-graphics:${javaFXVersion}:${javaFXPlatform}" } application { //Java Module System module name mainModule.set('com.example.javafxgradle') //Your JavaFX application class mainClass.set('com.example.javafxgradle.HelloFX') } java { // this enables Java Modularity in Gradle (version 6.7 and above) modularity.inferModulePath.set(true) } // Based on this StackOverflow answer: //stackoverflow.com/a/65209664/653519 private static String getJavaFXPlatform() { def currentOS = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem; if (currentOS.isWindows()) { return 'win' } else if (currentOS.isLinux()) { return 'linux' } else if (currentOS.isMacOsX()) { return 'mac' } return null }
該應(yīng)用程序從命令行(或IntelliJ IDEA終端窗口)運(yùn)行,并具有:
/.gradlew run(您將需要JAVA_HOME至少指向JDK 11的a)
它通過(guò)application -> run任務(wù)從Gradle工具窗口運(yùn)行
我們可以從HelloFX.java文件中運(yùn)行它,可以從裝訂線中的綠色箭頭,也可以通過(guò)??R(MacOS)或Ctrl + Shift + F10(Windows)運(yùn)行它。
我使用Java 15作為項(xiàng)目SDK。但是,它也應(yīng)與JDK 11或更高版本一起運(yùn)行。
如果您不熟悉Java模塊系統(tǒng),則可能不想在JavaFX應(yīng)用程序中使用它。如果是這種情況,請(qǐng)繼續(xù)閱讀,因?yàn)槟枰私庖恍┳⒁馐马?xiàng)和解決方法。
沒(méi)有模塊
。
最簡(jiǎn)單的Gradle方法應(yīng)該是在沒(méi)有Java模塊系統(tǒng)的情況下使用Gradle。
按照OpenJFX入門(mén)文檔中的步驟(導(dǎo)航到 "JavaFX和IntelliJ IDEA "下的 "Non-modular with Gradle "的鏈接),或者克隆/下載示例應(yīng)用程序代碼。請(qǐng)注意,如果你沒(méi)有使用Java模塊系統(tǒng),JavaFX Gradle插件會(huì)做所有你需要的事情,不管你使用的Gradle版本如何,所以你的build.gradle文件比上面顯示的版本更簡(jiǎn)單。
與模塊化版本一樣,您可以使用以下命令從命令行運(yùn)行此JavaFX應(yīng)用程序:
/.gradlew run或者您可以run通過(guò)Gradle工具窗口運(yùn)行任務(wù),如上所示。或者,您可以使用“執(zhí)行任何操作”(Ctrl Ctrl)并輸入gradle run。
注意
請(qǐng)注意,如果HelloFX.java從IntelliJ IDEA編輯器內(nèi)部運(yùn)行文件,則該文件可能不起作用。
這不是一個(gè)大問(wèn)題,因?yàn)槟匀豢梢允褂闷渌椒ǎ⑶彝ㄟ^(guò)IntelliJ IDEA運(yùn)行Gradle命令仍會(huì)將其添加為有效的運(yùn)行配置。
JavaFX與Maven
獲得使用Maven的JavaFX應(yīng)用程序的最簡(jiǎn)單方法是JavaFX Maven Archetype。使用OpenJFX入門(mén)文檔,按照 "JavaFX和IntelliJ"->"Modular with Maven"(或 "Non-modular with Maven",在寫(xiě)這篇文章的時(shí)候,這兩種方法的結(jié)果似乎是一樣的)下的說(shuō)明進(jìn)行操作。
使用原型的好處是,所有的基本代碼都會(huì)為你生成,你什么都不用做。你應(yīng)該最終得到一個(gè)像我的javafx-maven-via-archetype代碼這樣的項(xiàng)目。
生成的應(yīng)用程序使用了Java 9中引入的Java模塊系統(tǒng),這對(duì)于一個(gè)簡(jiǎn)單的應(yīng)用程序來(lái)說(shuō)應(yīng)該是沒(méi)有問(wèn)題的,但值得注意的是,萬(wàn)一你遇到任何意外的行為。
該應(yīng)用程序從命令行(或IntelliJ IDEA終端窗口)運(yùn)行,并具有:
(假設(shè)你已經(jīng)安裝了Maven)
你也可以從App.java的水溝里的綠色箭頭處運(yùn)行它。
如果你想運(yùn)行我的示例應(yīng)用程序,你需要使用Java 15,我在Maven中特別設(shè)置了它為JDK。
注意
通過(guò)Maven的工具窗口運(yùn)行可能會(huì)失效。
如果你的操作系統(tǒng)的JAVA_HOME低于Java 15(例如,我的系統(tǒng)設(shè)置為Java 11),你在工具窗口中運(yùn)行javafx:run會(huì)出現(xiàn)錯(cuò)誤。
沒(méi)有模塊
并非每個(gè)人都希望或需要在其應(yīng)用程序中使用Java模塊系統(tǒng)(盡管我建議人們嘗試一下)。在這種情況下,您可以繼續(xù)按照上述步驟創(chuàng)建應(yīng)用程序,但是刪除module-info.java文件。在中pom.xml,從中刪除模塊名稱mainClass。例如,更改此:
對(duì)此:
注意:
如果你使用no-modules的方法,你仍然可以像以前一樣從命令行運(yùn)行應(yīng)用程序,但你將無(wú)法通過(guò)編輯器運(yùn)行它,也就是說(shuō),你既無(wú)法從水溝中的綠色箭頭運(yùn)行App.java,也無(wú)法通過(guò)??R(MacOS)或Ctrl+Shift+F10(Windows)運(yùn)行App.java。
Maven 注釋:
IntelliJ IDEA Reactive Spring Boot教程,其中有一個(gè)JavaFX前端,使用Maven。我已經(jīng)將它升級(jí)為使用Java 15和JavaFX 15.0.1,它沒(méi)有使用Java模塊化,似乎可以正常工作--無(wú)論是從命令行運(yùn)行還是從IntelliJ IDEA運(yùn)行UI應(yīng)用類。
我還沒(méi)有弄清楚這是為什么,我的假設(shè)是由于Spring照顧了很多的依賴關(guān)系。隨意翻翻代碼吧。
總結(jié):
創(chuàng)建JavaFX應(yīng)用程序就像使用任何其他框架一樣--了解如何開(kāi)始,以及各種方法的優(yōu)缺點(diǎn)是什么,是成功的關(guān)鍵。在過(guò)去五年左右的時(shí)間里,JavaFX經(jīng)歷了激動(dòng)人心的時(shí)刻,很高興看到我們可以在前端以及應(yīng)用程序的后端使用Java。
如果你的應(yīng)用程序使用的是JavaFX前端,如果在你選擇的構(gòu)建工具中配置正確,你可以在IntelliJ IDEA中構(gòu)建和運(yùn)行它。
好了這就是今天的內(nèi)容了,如果今天的文章未解決你的需求,可點(diǎn)擊獲取更多免費(fèi)教程。不要忘了在評(píng)論與我們分享您的想法和建議,慧都作為IntelliJ IDEA正版合作商,我們推出"軟件國(guó)產(chǎn)化服務(wù)季"活動(dòng)(點(diǎn)擊查看詳情)!現(xiàn)IntelliJ正版授權(quán)在線訂購(gòu)最高立減3000元!低至1333!還有多種授權(quán)方式供你選擇。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: