JDK 11上的JavaFX
在第11版發布之后,人們對JavaFX與JDK的解耦感到百感交集。 我們中的許多人認為現在是時候告別JavaFX并改用另一種GUI技術了,而另一些人對此情況感到高興。 他們認為,將JavaFX與Oracle分離開來,并致力于將其開發為開源社區驅動的項目,對于JavaFX取得更大發展是一個絕好的機會。 我屬于后者。 盡管我可能擔心JavaFX的發展方式,但是我堅信,憑借Java Modularity和JPMS所帶來的功能,擁有一個單獨的JavaFX模塊確實令人著迷。 您可以只將該模塊包含到您的項目中,使用“ jlink”工具和BOOM創建自定義運行時映像! 您只有一個精美的模塊化項目,可以輕松在其他地方運輸和運行該項目。
您可能會問自己:“如何?”。 這基本上就是我將在本文中為您說明的內容。 我將向您展示如何使用Maven創建模塊化項目。
環境:
我正在“搶先體驗”上使用JDK 11。 您可以從以下鏈接下載它: http : //jdk.java.net/11/
$ java --version java 11-ea 2018-09-25 Java(TM) SE Runtime Environment 18.9 (build 11-ea+24) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11-ea+24, mixed mode)還有Apache Maven
$ mvn --version Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T23:03:14+04:30) Maven home: C:\Program Files\Maven\apache-maven-3.5.4 Java version: 11-ea, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-11 Default locale: en_US, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"創建一個項目:
我的項目有2個模塊。 一個模塊是邏輯 ,而另一個模塊則是JavaFX相關代碼所屬的GUI 。
這是項目結構:
javafx11-demo │ pom.xml │ ├───gui │ │ pom.xml │ │ │ └───src │ └───main │ └───java │ │ module-info.java │ │ │ └───com │ └───mhrimaz │ └───gui │ GUIMain.java │ └───logic│ pom.xml│└───src└───main└───java│ module-info.java│└───com└───mhrimaz└───logicCoolLogic.java配置“ pom.xml”:
這是根pom.xml的內容:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mhrimaz</groupId><artifactId>javafx11-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>logic</module><module>gui</module></modules><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version><configuration><source>11</source><target>11</target><showWarnings>true</showWarnings><showDeprecation>true</showDeprecation></configuration><dependencies><dependency><groupId>org.ow2.asm</groupId><artifactId>asm</artifactId><version>6.2</version></dependency></dependencies></plugin></plugins></build> </project>基本上,我正在配置maven編譯器插件并將其配置為Java11。請注意,我定義了兩個模塊: 邏輯和gui 。
對于邏輯模塊,pom.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mhrimaz</groupId><artifactId>javafx11-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>logic</artifactId><version>1.0-SNAPSHOT</version></project>最后,對于gui模塊,我們將其pom.xml定義如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mhrimaz</groupId><artifactId>javafx11-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>gui</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.mhrimaz</groupId><artifactId>logic</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>11-ea+19</version></dependency></dependencies></project>請注意,這里有兩個依賴關系,一個是對邏輯模塊的依賴,因為每個gui都需要邏輯,而另一個是對javafx -controls模塊的依賴。
配置“ module-info.java”:
如果您不熟悉Java模塊化概念,建議您閱讀其他有關JPMS和模塊化的文章。
我們應該導出“ com.mhrimaz.logic”包,以使其在我們的模塊之外可以訪問。
module logic{exports com.mhrimaz.logic; }對于gui模塊,我們應該做幾件事,首先,我們需要邏輯模塊。 另一件事是,我們應該需要javafx.controls模塊。 最后,出于JavaFX的考慮,我們應該打開“ com.mhrimaz.gui”包以進行運行時深度反射訪問。 我們將完成以下配置:
module gui{requires logic;requires javafx.controls;opens com.mhrimaz.gui to javafx.graphics; }最后步驟:
為了編譯和構建模塊,請輸入以下命令:
mvn clean install這將為您編譯并構建模塊。 最后,您將具有以下層次結構:
C:. │ pom.xml │ ├───gui │ │ pom.xml │ │ │ ├───src │ │ └───main │ │ └───java │ │ │ module-info.java │ │ │ │ │ └───com │ │ └───mhrimaz │ │ └───gui │ │ GUIMain.java │ │ │ └───target │ │ gui-1.0-SNAPSHOT.jar │ │ │ ├───classes │ │ │ module-info.class │ │ │ │ │ └───com │ │ └───mhrimaz │ │ └───gui │ │ GUIMain.class │ │ │ ├───generated-sources │ │ └───annotations │ ├───maven-archiver │ │ pom.properties │ │ │ └───maven-status │ └───maven-compiler-plugin │ └───compile │ └───default-compile │ createdFiles.lst │ inputFiles.lst │ └───logic│ pom.xml│├───src│ └───main│ └───java│ │ module-info.java│ ││ └───com│ └───mhrimaz│ └───logic│ CoolLogic.java│└───target│ logic-1.0-SNAPSHOT.jar│├───classes│ │ module-info.class│ ││ └───com│ └───mhrimaz│ └───logic│ CoolLogic.class│├───generated-sources│ └───annotations├───maven-archiver│ pom.properties│└───maven-status└───maven-compiler-plugin└───compile└───default-compilecreatedFiles.lstinputFiles.lst現在如何運行? 經過大量的搜索和挖掘,我沒有想出可以輸入maven命令來運行該項目的解決方案,因此我將以老式的方式進行。
基本命令如下:
java --module-path <all-of-your-modules-jar-file> -m <which-module>/<and-which-class-of-it-you-want-to-run>因此,我們知道,這不是我們應該采取的行動,但我的朋友對您的期望低。 如果有人知道更好的方法,請告訴我。 該命令是:
java --module-path gui\target\gui-1.0-SNAPSHOT.jar;logic\target\logic-1.0-SNAPSHOT.jar -m gui/com.mhrimaz.gui.GUIMain顯然,如果運行此命令,最終將看到此錯誤:
Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found, required by gui基本上,它說,在模塊解析期間,沒有找到javafx.controls模塊。 很簡單,您應該將所有JavaFX模塊添加到模塊路徑。 最終命令如下:
java --module-path gui\target\gui-1.0-SNAPSHOT.jar;logic\target\logic-1.0-SNAPSHOT.jar;"C:\Users\YOURUSERNAME\.m2\repository\org\openjfx\javafx-base\11-ea+19\javafx-base-11-ea+19-win.jar";"C:\Users\YOURUSERNAME\.m2\repository\org\openjfx\javafx-graphics\11-ea+19\javafx-graphics-11-ea+19-win.jar";"C:\Users\YOURUSERNAME\.m2\repository\org\openjfx\javafx-controls\11-ea+19\javafx-controls-11-ea+19-win.jar" -m gui/com.mhrimaz.gui.GUIMain這個命令在我的Windows機器上可以正常工作。 如果需要代碼,可以在我的GitHub上找到它。
如果您有任何疑問,請不要猶豫,我會盡力回答。
最后,Hello World!
翻譯自: https://www.javacodegeeks.com/2018/08/javafx-on-jdk-11.html
總結
以上是生活随笔為你收集整理的JDK 11上的JavaFX的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无备案的学校怎么办(无备案的学校)
- 下一篇: Java NIO教程