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