JDK 11上的JavaFX

在第11版发布之后,人们对JavaFX与JDK的解耦感到百感交集。 我们中的许多人认为现在是时候告别JavaFX并改用另一种GUI技术了,而另一些人对此情况感到高兴。 他们认为,将JavaFX与Oracle分离开来,并致力于将其开发为开源社区驱动的项目,对于JavaFX取得更大发展是一个绝好的机会。 我属于后者。 尽管我可能担心JavaFX的发展方式,但是我坚信,凭借Java Modularity和JPMS所带来的功能,拥有一个单独的JavaFX模块确实令人着迷。 您可以只将该模块包含到您的项目中,使用“ jlink”工具和BOOM创建自定义运行时映像! 您只有一个精美的模块化项目,可以轻松在其他地方运输和运行该项目。

javafx

您可能会问自己:“如何?”。 这基本上就是我将在本文中为您说明的内容。 我将向您展示如何使用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!

javafx

翻译自: https://www.javacodegeeks.com/2018/08/javafx-on-jdk-11.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HMM(隐马尔可夫模型)

1.什么是熵(Entropy) 简单来说&#xff0c;熵是表示物质系统状态的一种度量&#xff0c;用它老表征系统的无序程度。熵越大&#xff0c;系统越无序&#xff0c;意味着系统结构和运动的不确定和无规则&#xff1b;反之&#xff0c;&#xff0c;熵越小&#xff0c;系统越有序&am…

【渝粤题库】陕西师范大学201451 中国法制史作业

《中国法制史》作业 一&#xff0e;填空题 &#xff11;&#xff0e;中国奴隶奴隶制法律产生于_________朝。 &#xff12;&#xff0e;西周时期&#xff0c;提出了“”的刑事政策&#xff0c;具体标准是“刑新国&#xff0c;用____典&#xff1b;刑平国&#xff0c;用______典…

Lindley equation

In probability theory, the Lindley equation, Lindley recursion or Lindley processes is a discrete-time stochastic process AnA_nAn​ where nnn takes integer values and: An1max(0,AnBn)A_{n 1} max(0, A_n B_n)An1​max(0,An​Bn​). Processes of this form can…

Java NIO教程

1.简介 Java NIO是从Java 1.4引入的库。 自从Java NIO推出以来&#xff0c;它提供了另一种方法来处理I / O和网络事务。 它被认为是Java网络和Java IO库的替代方法。 开发Java NIO的目的是使输入和输出的事务异步和非阻塞。 阻塞和非阻塞IO的概念将在后面的部分中介绍。 目录…

【渝粤题库】陕西师范大学201941 Java程序设计 作业(专升本)

《JAVA程序设计》作业 一、选择题 编译HelloWorld.java的正确命令是&#xff1a; java HelloWorld.class B)java HelloWorld.java C)javac HelloWorld.java 正确运行HelloWorld.java的正确命令是&#xff1a; java HelloWorld B&#xff09;javac HelloWorld.java C&#xff09…

MATLAB追加向量

MATLAB 允许在原有的向量中附加向量&#xff0c;共同创造新的向量。 如果有两个行向量 r1 和 r2 这两个行向量中各有 n 和 m 个元素&#xff0c;现在创建行向量 r 并将n和m个元素都放在行向量 r 中&#xff0c;通过附加这些载体&#xff0c;编写&#xff1a; r [r1,r2]通过追…

【渝粤题库】国家开放大学2021春2441经济数学基础1题目

试卷代号&#xff1a;2441 2021年春季学期期末统一考试 经济数学基础1 试题 2021年7月 导数基本公式&#xff1a; 积分基本公式&#xff1a; ©′0 ()′ ()′ ()′ ()′ ()′ ()′cosx ()′ ()′ ()′ 一、单项选择题&#xff08;每小题4分&#xff0c;本题共20分…

【渝粤题库】陕西师范大学163211 会展管理作业

一、单项选择题 1.国际上通常提到的MICE&#xff0c;以下不正确的是&#xff08; &#xff09; A M是指corporate meeting B I是指incentive travel program C C是指construction D E是指exhibition 2.世界会展业的发源地是( ) 。 A亚洲 B美洲 C大洋洲 D欧洲 3.会展业与旅游业的…

关于判断函数凸或凹以及最优化的问题

大部分情况下都转换为凸优化问题&#xff0c;并通过最优化方法来求解&#xff0c;因此了解相关知识就显得尤为重要了。 主要内容&#xff1a; 问题引出凸集凸函数凸优化最优化 1、问题引出 在n维空间中&#xff0c;对于任意两个点&#xff0c;对于0<μ<1&#xff0c;…

【渝粤题库】国家开放大学2021春2038财务管理题目

试卷代号&#xff1a;2038 2021年春季学期期末统一考试 财务管理 试题&#xff08;开卷&#xff09; 2021年7月 一、单项选择&#xff08;在下列各题的备选答案中选择一个正确的&#xff0c;并将其序号字母填入题后的括号里。每小题2分&#xff0c;计20分&#xff09; 1.股东财…

javafx弹出式窗口_JavaFX 8的弹出式编辑器

javafx弹出式窗口在过去的几个月中&#xff0c;我很高兴与JavaFX 8一起使用&#xff0c;以便为计划和调度应用程序实现复杂的用户界面。 所需的功能之一是执行“就地”编辑的方法&#xff0c;即快速编辑用户选择对象的某些基本属性的方法。 遵循“如果您无法创新&#xff0c;就…

随机访问MAC协议 知识梳理(ALOHA,CSMA,CSMA/CD,CSMA/CA)

0、随机访问MAC的协议 数据链路层动态随机分配信道时对随机访问MAC协议&#xff1a;ALOHA&#xff0c;CSMA&#xff0c;CSMA/CD&#xff0c;CSMA/CA ALOHA&#xff0c;CSMA&#xff0c;CSMA/CD的区别仅在于是否对信道进行监听和是否有碰撞检测&#xff1a; 1、ALOHA&#xf…

【渝粤题库】国家开放大学2021春2508学前儿童语言教育题目

试卷代号&#xff1a;2508 2021年春季学期期末统一考试 学前儿童语言教育 试题&#xff08;开卷&#xff09; 2021年7月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和…

认识CUBA平台的CLI

毫无疑问&#xff0c;软件开发人员&#xff08;尤其是Java开发人员&#xff09;的世界充满了键盘狂热者&#xff0c;最好是一次单击即可键入10-15个字母。 而且我们的社区也不例外&#xff0c;因此经常有人问我们“如何在没有CUBA Studio的情况下启动项目&#xff1f;”之类的问…

【渝粤题库】国家开放大学2021春2603城市轨道交通安全管理题目

试卷代号&#xff1a;2603 2021年春季学期期末统一考试 城市轨道交通安全管理 试题 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;将正确答案选项的字母填入题目中的括号内&#xff09; 1.( )是将企业作为安全管理的主体&#xff0c;是指经济和…

将matlab中数据输出保存为txt或dat格式

一、将matlab中数据输出保存为txt或dat格式的三种方法。 第一种方法&#xff1a;save&#xff08;最简单基本的&#xff09; 具体的命令是&#xff1a;用save *.txt -ascii x x为变量 *.txt为文件名,该文件存储于当前工作目录下&#xff0c;再打开就可以打开后,数据有可能是以…

【渝粤题库】国家开放大学2021春2633轨道交通信号与通信系统题目

试卷代号&#xff1a;2633 2021年春季学期期末统一考试 轨道交通信号与通信系统 试题 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;将正确答案选项的字母填入题目中的括号内&#xff09; 1.城市轨道交通系统的安全、速度、输送能力和效率与信…

【渝粤题库】国家开放大学2021春2724市场营销原理与实务题目

试卷代号&#xff1a;2724 2021年春季学期期末统一考试 市场营销原理与实务 试题 2021年7月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监…

马尔可夫链笔记

1 引言 之前学习了伯努利过程和泊松过程&#xff0c;它们是无记忆性&#xff0c;不依赖于过去的状态&#xff0c;今天学习了马尔可夫链&#xff0c;它会依赖于过去的过程&#xff0c;更准确的说是依赖于过去的某种状态。 2 离散时间的马尔可夫链&#xff08;Markov Chain, MC…

【渝粤题库】国家开放大学2021春2768养禽技术题目

试卷代号&#xff1a; 2768 2021年春季学期期末统一考试 养禽技术 试题 2021年7月 一、单项选择题&#xff08;每小题3分&#xff0c;共30分&#xff09; 1.下列品种中属于兼用型鸭品种的是( )。 A.高邮鸭 B.北京鸭 C.绍兴鸭 D.金定鸭 2.鸡的第一限制性氨基酸是( )。 A.蛋氨酸 …