jdk11 javafx

在JFX第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

jdk11 javafx

jdk11 javafx_JDK 11上的JavaFX相关推荐

  1. JDK 11上的JavaFX

    在第11版发布之后,人们对JavaFX与JDK的解耦感到百感交集. 我们中的许多人认为现在是时候告别JavaFX并改用另一种GUI技术了,而另一些人对此情况感到高兴. 他们认为,将JavaFX与Ora ...

  2. JDK11使用IDEA,配置JavaFX

    JDK11使用IDEA,配置JavaFX 1.下载javaFX相关的包 2.在实际Demo中试验哪里少了添加哪里 导入lib文件夹,之后点击OK 配置VMoption 配置成功 3.运行,大功告成 1 ...

  3. deepin如何布署python_【玩转deepin】简单三步,教你在deepin15.11上安装Python3.7.4

    小编在论坛中看到有同学询问如何安装Python3.7,考虑到不少同学从panda进化到Lion后,也有了安装Python最新版本的需求,下面小编就来带着大家一起在deepin15.11上从源代码编译安 ...

  4. openSUSE 11 上的配置可以Xmanager远程桌面

    openSUSE 11 上的配置(适用于默认图形环境为KDE的Linux): 1.配置KDM. openSUSE 11的默认图形环境为KDE,虽然可以同时安装GDM和KDM,但默认只启动了KDM.所以 ...

  5. android获取应用安装通知消息,如何在Android 11 上获取已安装应用列表

    在Android 11上,我们可以看到很多的更新都是用来保护隐私的,如果你的app 在使用PackageManger的方法来获取安装的应用列表, 那么在Android11上,就需要做一点改变了. 我们 ...

  6. 一张图教你玩转阿里云双11上云狂欢节

    一年一度的双11狂欢节已经开启啦!下面一张图教你如何玩转阿里云双11上云狂欢节! 双11主会场地址:http://click.aliyun.com/m/1000305076/

  7. 2021双11上云狂欢节 | 爆款产品底价全面开售

    一年一度的双11狂欢节终于来啦!怎样用最少的钱获得最多的福利?下面这份攻略收藏好,这波活动快冲! 双11主会场:http://click.aliyun.com/m/1000304310/ 01 领取双 ...

  8. java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...

    我正在尝试将我的调试器连接到在Open JDK 11上运行的Wildlfy. 尽管Wildfly说: Listening for transport dt_socket at address: 878 ...

  9. RxHttp 完美适配Android 10/11 上传/下载/进度监听

    1.前言 随着Android 11的正式发布,适配Android 10/11 分区存储就更加的迫切了,因为Android 11开始,将强制开启分区存储,我们就无法再以绝对路径的方式去读写非沙盒目录下的 ...

最新文章

  1. 事务-07-微服务架构的设计模式
  2. python的nan,NaN,NAN
  3. 鸿蒙系统哪里的,华为“鸿蒙系统”IPFS/FIL:区块链的“鸿蒙系统”?
  4. 一个简单的记事本程序
  5. C# The user specified as a definer (‘root‘@‘%‘) does not exist
  6. 计算机组成原理—虚拟存储器的基本概念
  7. sql中exist()的用法
  8. 2014 百度之星 1003 题解 Xor Sum
  9. eclipse adt 安卓开发配置
  10. Vue实现pdf、docx、jpg在线预览功能
  11. 基于javaweb学生就业管理系统的设计与实现(论文+程序设计+数据库文件)下载
  12. vue 在线答题功能
  13. mysql数据库首次查询缓慢
  14. 2021年化工自动化控制仪表考试内容及化工自动化控制仪表作业考试题库
  15. java判断一个字符串是否是数字(包括正数,负数,小数)
  16. Unicode blocks 统计
  17. 什么是服务器工程文件格式,Visio找不到数据库建模功能怎么办 VSD文件是什么格式...
  18. 【有料】微服务架构中的BFF到底是啥?
  19. 高企认定没专利?专利评分低?如何评分?
  20. IjkPlayer+AndroidVideoCache 实现音乐播放

热门文章

  1. P3706-[SDOI2017]硬币游戏【高斯消元,字符串hash】
  2. CF1556D-Take a Guess【交互】
  3. 【数论】GCD SUM(P2398)
  4. 【DP】Bovine Genetics G(P7152)
  5. 【DP】集合问题(2015特长生 T4/luogu 1466)
  6. 【线段树】FREQUENT - Frequent values(luogu-SP1684 / poj 3368)
  7. Spark SQL(二)之DataSet操作
  8. Spark SQL(一)之简介
  9. 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题
  10. SpringBoot整合kafka(实现producer和consumer)