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相关推荐
- Oracle 宣布 JDK 11 将把 JavaFX 分离成独立模块
Oracle 近日在其官方博客宣布,从 JDK 11 开始,JavaFX 将作为独立模块从 JDK 中分离出来,以使 JavaFX 更易于被采用.该调整将降低新贡献者参与 OpenJFX 开源社区的门 ...
- jdk11 javafx_JDK 11上的JavaFX
jdk11 javafx 在JFX第11版发布后,人们对JavaFX与JDK的解耦感到百感交集. 我们许多人认为现在是时候告别JavaFX并改用另一种GUI技术了,而另一些人对此情况感到高兴. 他们认 ...
- java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
我正在尝试将我的调试器连接到在Open JDK 11上运行的Wildlfy. 尽管Wildfly说: Listening for transport dt_socket at address: 878 ...
- java控制台检测不到远程端口,java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
我正在尝试将我的调试器连接到在Open JDK 11上运行的Wildlfy. 尽管Wildfly说: Listening for transport dt_socket at address: 878 ...
- 記録一次JDK 11下運行JavaFX(IntelliJ IDEA的Maven項目下)
從JDK 11開始,JavaFX已經不包含在JDK裡,所以我們要運行JavaFX程式,會比之前的版本中運行要麻煩一些.為此我查閱了一下JavaFX社區的資料:https://openjfx.io/op ...
- java jdk设置字符集_使用JDK 11在Java字符串上的新方法
java jdk设置字符集 Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布. 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串: ...
- 使用JDK 11在Java字符串上的新方法
Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布. 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串::行 lines() &qu ...
- 还没用上 JDK 11,12 就要来了
更新速度快的飞起,JDK 12 早期访问构建版已发布,你现在用到了第几版本? 自从 2017 年 9 月 21 日 Java 9 正式发布之时,Oracle 就宣布今后会按照每六个月一次的节奏进行更新 ...
- 还没用上 JDK 11吧,JDK 12 早期访问构建版使用
JDK 更新速度快的飞起,JDK 12 早期访问构建版已发布,你现在用到了第几版本? 本周Java的最大新闻可能是JDK 11的正式发布.不过在 6 月底,JDK 11 就已经进入了 Rampdown ...
最新文章
- FOSCommentBundle功能包:与FOSUserBundle集成
- ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解
- 微软Kinect 1.7 附带ColorBasics-D2D示例程序基本解析
- Redux 莞式教程 之 简明篇
- 网站的服务器角色选哪个,原神平民开服选什么角色最好-开服必备角色推荐_好特网...
- Gibbs sampling [Gibbs采样]
- 【Tools】Visual Studio 2017下载和安装
- 2017.10.12 小Q的无敌异或 失败总结
- wangeditor php上传本地图片,wangEditor 本地上传图片配置
- clickhouse 的mysql表引擎
- Vue.js(二) 模板语法
- 四位共阳极数码管显示函数_4位共阴极数码管单片机驱动
- 点线面的特点_夯实基础!点线面的基本特点与表现
- python 使用 io.BytesIO 内存文件加速图片生成服务
- Cadence OrCAD Capture 查找功能详细介绍
- 乐观数据:企业抖音蓝V账号获取流量运营的四个技巧
- Java程序设计基本概念
- 乡村爱情故事8 下载地址
- 计算机网络中核心部分,什么是计算机的核心部分
- 【课程设计】六足机器人颜色识别模块python程序
热门文章
- 【模拟】聊天服务器的外部流量
- springboot手动提交kafka offset
- 常用公有云接入——AZURE
- 由「Metaspace容量不足触发CMS GC」从而引发的思考
- 一文带你理解Java中Lock的实现原理
- hibernate配置详情2(Dept.hbm.xml)
- Redis(案例六:ZSet数据)
- 在idea 中添加和删除模块Module
- perform指标分析_performace 监控统计
- 如何设置电脑自动锁屏_这个手机锁屏密码竟可以根据时间而变化!密码每分钟都会发生改变...