翻譯|使用教程|編輯:鮑佳佳|2021-01-25 10:34:08.080|閱讀 381 次
概述:在過去的六年里,我一直在我的一些演示應(yīng)用程序中使用JavaFX,我了解到的一件事是,它是一個移動的目標,特別是在Java 11中JavaFX被從JDK中移除之后。我想知道的是,目前創(chuàng)建一個新的JavaFX應(yīng)用程序的最佳方法是什么,以及如何從IntelliJ IDEA內(nèi)部運行它?
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在過去的六年里,我一直在我的一些演示應(yīng)用程序中使用JavaFX,我了解到的一件事是,它是一個移動的目標,特別是在Java 11中JavaFX被從JDK中移除之后。我想知道的是,目前創(chuàng)建一個新的JavaFX應(yīng)用程序的最佳方法是什么,以及如何從IntelliJ IDEA內(nèi)部運行它?
構(gòu)建工具和JavaFX
JavaFX并不像你在應(yīng)用中可能使用的其他庫那樣簡單依賴。我們不能在Maven或Gradle文件中添加一個新的依賴關(guān)系,然后直接開始使用它,這主要是因為UI框架比其他類型的框架更依賴于你的操作系統(tǒng)。這主要是因為UI框架比其他類型的框架更依賴于你的操作系統(tǒng),所以構(gòu)建工具需要為你的操作系統(tǒng)引入正確的依賴關(guān)系。
在我的JavaFX應(yīng)用中使用過Maven和Gradle,我看到了這兩種工具所采取的方法。由于這兩個構(gòu)建工具都很流行,所以我想把它們都介紹一下。
使用Java模塊系統(tǒng)
如果你想要與IntelliJ IDEA、JavaFX和Gradle一起工作的無縫體驗,并且你可以自由地做出所有的架構(gòu)決策,可以嘗試使用Java的模塊系統(tǒng)(在Java 9中引入)創(chuàng)建一個模塊化的應(yīng)用程序。對像我們在這里編寫的演示應(yīng)用這樣的小應(yīng)用來說,唯一真正影響的是一個額外的文件,模塊-info.java。
在使用模塊時有很多微妙的地方,我在這個例子中不會涉及。最主要的是,你需要注意的是,模塊化應(yīng)用使用的是模塊路徑,而不是我們熟知和喜愛的classpath。
OpenJFX入門文檔介紹了如何創(chuàng)建這樣的應(yīng)用程序(按照菜單項 "JavaFX和IntelliJ"->"Gradle模塊化")。
然而,如果你使用的是Gradle 6.7或以上版本(如果你從IntelliJ IDEA 2020.3創(chuàng)建了一個Gradle應(yīng)用程序,就會是這樣),JavaFX Gradle Plugin(0.0.9版本)就不能做所需的事情,因為Gradle改變了它構(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終端窗口)運行,并具有:
/.gradlew run(您將需要JAVA_HOME至少指向JDK 11的a)
它通過application -> run任務(wù)從Gradle工具窗口運行
我們可以從HelloFX.java文件中運行它,可以從裝訂線中的綠色箭頭,也可以通過??R(MacOS)或Ctrl + Shift + F10(Windows)運行它。
我使用Java 15作為項目SDK。但是,它也應(yīng)與JDK 11或更高版本一起運行。
如果您不熟悉Java模塊系統(tǒng),則可能不想在JavaFX應(yīng)用程序中使用它。如果是這種情況,請繼續(xù)閱讀,因為您需要了解一些注意事項和解決方法。
沒有模塊
。
最簡單的Gradle方法應(yīng)該是在沒有Java模塊系統(tǒng)的情況下使用Gradle。
按照OpenJFX入門文檔中的步驟(導(dǎo)航到 "JavaFX和IntelliJ IDEA "下的 "Non-modular with Gradle "的鏈接),或者克隆/下載示例應(yīng)用程序代碼。請注意,如果你沒有使用Java模塊系統(tǒng),JavaFX Gradle插件會做所有你需要的事情,不管你使用的Gradle版本如何,所以你的build.gradle文件比上面顯示的版本更簡單。
與模塊化版本一樣,您可以使用以下命令從命令行運行此JavaFX應(yīng)用程序:
/.gradlew run或者您可以run通過Gradle工具窗口運行任務(wù),如上所示。或者,您可以使用“執(zhí)行任何操作”(Ctrl Ctrl)并輸入gradle run。
注意
請注意,如果HelloFX.java從IntelliJ IDEA編輯器內(nèi)部運行文件,則該文件可能不起作用。
這不是一個大問題,因為您仍然可以使用其他方法,并且通過IntelliJ IDEA運行Gradle命令仍會將其添加為有效的運行配置。
JavaFX與Maven
獲得使用Maven的JavaFX應(yīng)用程序的最簡單方法是JavaFX Maven Archetype。使用OpenJFX入門文檔,按照 "JavaFX和IntelliJ"->"Modular with Maven"(或 "Non-modular with Maven",在寫這篇文章的時候,這兩種方法的結(jié)果似乎是一樣的)下的說明進行操作。
使用原型的好處是,所有的基本代碼都會為你生成,你什么都不用做。你應(yīng)該最終得到一個像我的javafx-maven-via-archetype代碼這樣的項目。
生成的應(yīng)用程序使用了Java 9中引入的Java模塊系統(tǒng),這對于一個簡單的應(yīng)用程序來說應(yīng)該是沒有問題的,但值得注意的是,萬一你遇到任何意外的行為。
該應(yīng)用程序從命令行(或IntelliJ IDEA終端窗口)運行,并具有:
(假設(shè)你已經(jīng)安裝了Maven)
你也可以從App.java的水溝里的綠色箭頭處運行它。
如果你想運行我的示例應(yīng)用程序,你需要使用Java 15,我在Maven中特別設(shè)置了它為JDK。
注意
通過Maven的工具窗口運行可能會失效。
如果你的操作系統(tǒng)的JAVA_HOME低于Java 15(例如,我的系統(tǒng)設(shè)置為Java 11),你在工具窗口中運行javafx:run會出現(xiàn)錯誤。
沒有模塊
并非每個人都希望或需要在其應(yīng)用程序中使用Java模塊系統(tǒng)(盡管我建議人們嘗試一下)。在這種情況下,您可以繼續(xù)按照上述步驟創(chuàng)建應(yīng)用程序,但是刪除module-info.java文件。在中pom.xml,從中刪除模塊名稱mainClass。例如,更改此:
對此:
注意:
如果你使用no-modules的方法,你仍然可以像以前一樣從命令行運行應(yīng)用程序,但你將無法通過編輯器運行它,也就是說,你既無法從水溝中的綠色箭頭運行App.java,也無法通過??R(MacOS)或Ctrl+Shift+F10(Windows)運行App.java。
Maven 注釋:
IntelliJ IDEA Reactive Spring Boot教程,其中有一個JavaFX前端,使用Maven。我已經(jīng)將它升級為使用Java 15和JavaFX 15.0.1,它沒有使用Java模塊化,似乎可以正常工作--無論是從命令行運行還是從IntelliJ IDEA運行UI應(yīng)用類。
我還沒有弄清楚這是為什么,我的假設(shè)是由于Spring照顧了很多的依賴關(guān)系。隨意翻翻代碼吧。
總結(jié):
創(chuàng)建JavaFX應(yīng)用程序就像使用任何其他框架一樣--了解如何開始,以及各種方法的優(yōu)缺點是什么,是成功的關(guān)鍵。在過去五年左右的時間里,JavaFX經(jīng)歷了激動人心的時刻,很高興看到我們可以在前端以及應(yīng)用程序的后端使用Java。
如果你的應(yīng)用程序使用的是JavaFX前端,如果在你選擇的構(gòu)建工具中配置正確,你可以在IntelliJ IDEA中構(gòu)建和運行它。
好了這就是今天的內(nèi)容了,如果今天的文章未解決你的需求,可點擊獲取更多免費教程。不要忘了在評論與我們分享您的想法和建議,慧都作為IntelliJ IDEA正版合作商,我們推出"軟件國產(chǎn)化服務(wù)季"活動(點擊查看詳情)!現(xiàn)IntelliJ正版授權(quán)在線訂購最高立減3000元!低至1333!還有多種授權(quán)方式供你選擇。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: