借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

简介: 在本文中,笔者会讲解如何利用 Java 9 的模块系统在 60 秒内创建一个 JavaFX HelloWorld 应用程序。

【编者按】本文作者为 Carl Dea,主要介绍利用 Jigsaw 项目在大约一分钟内编写标准化的“Hello World”消息代码。本文系国内 ITOM 管理平台 OneAPM 编译呈现。

你可能已经听说了 Jave 9 的新模块系统,也就是 Jigsaw 项目。如果你还不了解 Java 9 的新模块系统,请阅读 Mark Reinhold 的模块系统状态报告。另外还可以看看 @nipafx Nicolai Parlog 的优秀博客。Nicolai 在博客中详细介绍了 Java 9 的新模块系统和众多场景。

在本文中,笔者会讲解如何利用 Java 9 的模块系统在 60 秒内创建一个 JavaFX HelloWorld 应用程序。

环境要求

截至本文发稿时,Java 9 仍然处于抢鲜体验阶段,请登录 https://jdk9.java.net/download/ 获取最新的构建版本。

  • JDK 9 EA 构建版本 114 或更高版本 (JDK 9 EA)

操作步骤

假设你已经安装了 JDK,也设置了相应的环境变量。此外,你还可以在命令行或终端并输入:java -version 来确定所安装的 JDK 版本。例如

借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

第 1 步:按照以下方式,在项目主目录下根据自己的操作系统( Windows、Linux 或 Mac)创建一个目录。此外,在 helloworld 项目目录下创建一个 src 目录。

 # Windows    c:\Users\myusername>md helloworld 

   c:\Users\myusername>md helloworld/src 

 # Linux 

   /user/home/myusername $ mkdir -p helloworld/src 

 # Mac 

   /Users/myusername$ mkdir -p helloworld/src cd helloworld

第 2 步:根据 Java 9 组织源码和模块的新方法,使用简单的命名惯例创建一个目录。

创建一个目录并按照模块命名,例如:com.mycompany.helloworld。假设你当前的目录是

 mkdir src/com.mycompany.helloworld

第 3 步: 基于 HelloWorld.java 文件的包命名空间创建若干目录。在本例中,我们会使用以下目录结构来创建主 HelloWorld.java 文件。

mkdir -p  src/com.mycompany.helloworld/com/mycompany/helloworld

目录应该如下所示:

 <User Home dir>/ 

   helloworld/ 

   src/ 

   com.mycompany.helloworld/ 

   com/ 

   mycompany/ 

   helloworld/

第 4 步:创建一个 module-info.java 文件。这样,编译器就会知道应用程序需要编译哪些核心模块依赖关系,并且运行 javafx 等模块。在 helloworld/src/com.mycompany.helloworld 目录下创建一个文件并命名为 module-info.java。复制以下代码并粘贴到 module-info.java 文件中。使用 vi、nano 或 notepad 编辑器。

module com.mycompany.helloworld { requires javafx.base; requires javafx.graphics; requires javafx.controls; exports com.mycompany.helloworld; }

第 5 步:创建 HelloWorld.java 应用程序文件。在 helloworld/src/com.mycompany.helloworld/com/mycompany/helloworld/ 目录中创建这一文件。复制以下代码并粘贴到 HelloWorld.java 应用程序文件中。

package com.mycompany.helloworld; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.stage.Stage; /** * A JavaFX Hello World */ public class HelloWorld extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { stage.setTitle("Hello World"); Group root = new Group(); Scene scene = new Scene(root, 300, 250); Button btn = new Button(); btn.setLayoutX(100); btn.setLayoutY(80); btn.setText("Hello World"); btn.setOnAction( actionEvent -> System.out.println("Hello World")); root.getChildren().add(btn); stage.setScene(scene); stage.show(); } }

第 6 步:使用 -d 选项加已编译模块的位置来编译该源码。新 helloworld 模块的目录是 mods/com.mycompany.helloworld

javac -d mods/com.mycompany.helloworld src/com.mycompany.helloworld/module-info.java src/com.mycompany.helloworld/com/mycompany/helloworld/HelloWorld.java

第 7 步:按照模块来执行 Hello World 应用程序。把模块编译到 mods 目录里之后,就可以使用 Java 9 的新 -modulepath 选项来指定已编译的模块目录了。此外,还要指定 -m 选项来执行模块及其主类 HelloWorld。使用以下命令:

java -modulepath mods -m com.mycompany.helloworld/com.mycompany.helloworld.HelloWorld

上一个命令的输出结果是:

借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

结论

不知道你的用时会不会超过 60 秒,但如果你的环境已经设置完毕,JDK 9 也已经安装好了,应该可以在几秒内剪切并粘贴代码。笔者发现,新版 Java 9 模块系统相当简单直接。尽管还要额外输入一些内容让编译器知道模块的位置,但这和 -classpath 选项确实没有多大区别。

笔者发现,大型项目把各个组份拆分为模块,并从中受益。这样一来,许多工具可以创建多个细小的可执行程序,从而缩短加载时间,这的确是令 Java 社区激动的时刻。虽然前路还很漫长,但这正是我们亟需的功能,它的到来一定会推动我们编写、管理和部署模块化软件。

本文转自 OneAPM 官方博客

原文地址:https://dzone.com/articles/a-javafx-helloworld-using-java-9s-project-jigsaw-i

相关文章
|
2月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
3月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
28天前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
61 1
|
19天前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
32 0
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
110 2
|
2月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
143 1
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
62 1
|
2月前
|
存储 Java 数据处理
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
37 1
|
3月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
49 5
|
2月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
37 0