java 11与java fx_JDK11上的JAVAFX

本文介绍了在Java 11环境下,如何使用Maven创建一个模块化项目,其中包括逻辑模块和JavaFX GUI模块。详细讲解了配置pom.xml和module-info.java的过程,以及如何解决运行时找不到JavaFX模块的问题。最后展示了运行项目的命令,并提供了GitHub上的代码示例。
摘要由CSDN通过智能技术生成

在第11次发布之后,人们对JavaFX与JDK脱钩产生了各种各样的感受。我们中的许多人认为现在是时候告别JavaFX并转而采用另一种GUI技术,而其他一些人则对这种情况感到高兴。他们认为将JavaFX从Oracle手中解耦并将其开发作为一个开源的社区驱动项目,这是JavaFX获得更大成功的绝佳机会。我属于后一组。虽然我可能会担心JavaFX的发展方式,但我坚信Java Modularity和JPMS为我们带来的功能,拥有一个单独的JavaFX模块实际上是非常吸引人的。您可以将该模块包含到项目中,使用“jlink”工具和BOOM创建自定义运行时映像!

你可能会问自己,“怎么样?”。这基本上就是我将在本文中为您说明的内容。我将向您展示如何使用Maven创建模块化项目。

环境

我在Early Access上使用JDK 11。您可以从以下链接下载:JDK 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

└───logic

CoolLogic.java

配置“pom.xml”:

这是root pom.xml的内容:

$title(pom.xml)

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">

4.0.0

com.mhrimaz

javafx11-demo

1.0-SNAPSHOT

pom

logic

gui

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

11

11

true

true

org.ow2.asm

asm

6.2

基本上,我正在配置maven编译器插件并为Java 11配置它。请注意,我定义了两个模块:logic和gui。

对于逻辑模块,pom.xml如下所示:

$title(pom.xml)

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">

4.0.0

com.mhrimaz

javafx11-demo

1.0-SNAPSHOT

logic

1.0-SNAPSHOT

最后,对于gui模块,我们将pom.xml定义如下:

$title(pom.xml)

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">

4.0.0

com.mhrimaz

javafx11-demo

1.0-SNAPSHOT

gui

1.0-SNAPSHOT

com.mhrimaz

logic

${project.version}

org.openjfx

javafx-controls

11-ea+19

请注意,这里我们有两个依赖项,一个是对逻辑模块的依赖,因为每个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-compile

createdFiles.lst

inputFiles.lst

现在怎么跑?经过大量的搜索和挖掘,我没有想出一个解决方案来输入一个maven命令来运行项目,所以我会以一种老式的方式来做。

基本命令如下:

java --module-path -m /

因此,我们将通过我们的手来实现,我知道,它不会以这种方式支持,但保持低我的朋友的期望。如果有人知道更好的方法,我将不胜感激,让我知道。命令是:

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!

3c25380fd943486a91d077093c2beaf3.png

Hello World JAVA FX

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值