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…

Java NIO教程

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

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

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

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…

认识CUBA平台的CLI

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

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

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

马尔可夫链笔记

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

「协方差」与「相关系数」的概念

一、协方差&#xff1a; 可以通俗的理解为&#xff1a;两个变量在变化过程中是同方向变化&#xff1f;还是反方向变化&#xff1f;同向或反向程度如何&#xff1f; 你变大&#xff0c;同时我也变大&#xff0c;说明两个变量是同向变化的&#xff0c;这时协方差就是正的。 你…

垃圾收集 java_关于Java垃圾收集

垃圾收集 java本文讨论的是使用的最流行的框架之一带来的开销–我敢打赌&#xff0c;几乎没有应用程序不使用java.util.Collections。 本文基于以下事实&#xff1a;框架为例如集合的初始大小提供了默认值。 因此&#xff0c;我们有一个假设&#xff0c;即大多数人不会费心地自…

Latex \bibliographystyle+修改字体字号的大小

1. bibliography style LaTeX 标准选项及其样式共有以下8种&#xff1a; plain &#xff0c;按字母的顺序排列&#xff0c;比较次序为作者、年度和标题. unsrt &#xff0c;样式同plain&#xff0c;只是按照引用的先后排序. alpha &#xff0c;用作者名首字母年份后两位作标号…

boxplot

1. 简介 箱形图&#xff0c;又称为盒须图、盒式图、盒状图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。箱形图于1977年由美国著名统计学家约翰图基&#xff08;John Tukey&#xff09;发明。它能显示出一组数据的最大值、最小值、中位数、上下四分位数及…

Java 11的期望

过去的几年对Java世界一直是动荡不安的&#xff0c;在相当多的发行版中添加了各种各样的功能。 在开发人员社区中&#xff0c;人们逐渐意识到Java的开发速度不够快。 在最初的20年中&#xff0c;Java平台和Java开发工具包&#xff08;JDK&#xff09;经历了庞大&#xff0c;不…

martingale与Markov Process的关系

鞅过程与马尔科夫过程是什么关系&#xff1f; 1.鞅代表的是公平游戏&#xff0c;马尔可夫过程侧重过程无记忆性 总而言之&#xff1a;鞅和马尔可夫过程没有包含的关系。因为鞅代表的是公平游戏&#xff0c;而马尔可夫过程侧重过程无记忆性。两者没有内在联系。 注&#xff1…

LaTeX双栏模板插入通栏公式(跨栏插图)

1. 利用带星号的浮动体环境 带星号的浮动体figure和table环境可以在双栏模板中使用&#xff0c;例如我们以IEEEtran为例&#xff0c;插入通栏公式 \documentclass{IEEEtran} \usepackage{amsmath&#xff0c;lipsum} \begin{document} \lipsum[1] \begin{figure*} \begin{ali…

renew process 更新过程

一个泊松过程可以分解成一系列 i.i.di.i.di.i.d 的指数分布随机变量相加&#xff0c;如果把指数分布换成其他 i.i.di.i.di.i.d 的分布就得到了更新过程。 更新过程本身是泊松过程的一种扩长&#xff0c;同时更新过程也可以发展出一套更新理论&#xff0c;包括更新方程等。 htt…

离散时间信号,连续时间信号,模拟信号,数字信号区别

连续时间信号 &#xff1a; 在时间t 上是连续的值 时间连续&#xff0c; 幅值连续。 定义为模拟信号。时间连续&#xff0c; 幅值离散。 比如脉冲信号。 离散时间信号 &#xff1a; 在时间t上 是离散的值 时间离散&#xff0c; 幅值连续。 &#xff08;在任意两个离散时间点…

java8 javafx_Java8中的外观(JavaFX8)

java8 javafxJavaFX8在外观方面进行了一些更改 &#xff0c;其中最相关的是新CSS API &#xff0c;它允许您为控件以及已公开的Skin类创建新CSS属性和伪类。 使用CSS可以更改控件的很多外观&#xff0c;但是CSS可以实现很多功能&#xff0c;这就是Skin类的用处。从“ UI控件体…

如何通俗易懂地解释卷积?

马同学 从数学上讲&#xff0c;卷积就是一种运算。 某种运算&#xff0c;能被定义出来&#xff0c;至少有以下特征&#xff1a; 首先是抽象的、符号化的 其次&#xff0c;在生活、科研中&#xff0c;有着广泛的作用 比如加法&#xff1a; [公式] &#xff0c;是抽象的&…

具有中央异常处理和VO验证的Spring Data JPA –框架

1.简介 一段时间以来&#xff0c;Spring框架已成为事实上的标准&#xff0c;可以创建任何基于REST API的应用程序。 Spring提供了各种现成的组件&#xff0c;以避免编写重复而繁琐的样板代码。 另外&#xff0c;关于Spring的美丽之处在于&#xff0c;如果有现成的解决方案&…