借助 Java 9 Jigsaw,如何在 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 版本。例如
第 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
上一个命令的输出结果是:
结论
不知道你的用时会不会超过 60 秒,但如果你的环境已经设置完毕,JDK 9 也已经安装好了,应该可以在几秒内剪切并粘贴代码。笔者发现,新版 Java 9 模块系统相当简单直接。尽管还要额外输入一些内容让编译器知道模块的位置,但这和 -classpath 选项确实没有多大区别。
笔者发现,大型项目把各个组份拆分为模块,并从中受益。这样一来,许多工具可以创建多个细小的可执行程序,从而缩短加载时间,这的确是令 Java 社区激动的时刻。虽然前路还很漫长,但这正是我们亟需的功能,它的到来一定会推动我们编写、管理和部署模块化软件。
OneAPM 能为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客
原文地址:https://dzone.com/articles/a-javafx-helloworld-using-java-9s-project-jigsaw-i
借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?的更多相关文章
- Jquery插件实现点击获取验证码后60秒内禁止重新获取
通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能 先到官网(http://plugins.jquery.com/cookie/ )下载coo ...
- 60秒定位问题,十倍程序员的Debug日常
作者:陶建辉 这是我在 2020 年 5 月写的一篇内部博客,当时是希望研发和技术支持同学能够帮助用户快速定位 Bug,解决问题.2020 年 12 月我又迭代了一版,并还针对此进行了内部的培训.这段 ...
- 如何在Etherscan.io 部署ETH以太坊智能合约 如何在15分钟内创建你的加密货币
一.概述 ETH 网络这里就不介绍了,这篇文章主要记录在以太坊主网和测试网络部署一个智能合约,也就是如何发币. 二.部署合约需要的生产工具 准备工具前,建议大家准备个VPN,因为会访问国外网 ...
- 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条源/目标MAC地址号递增流
国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...
- 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条UDP/TCP端口号递增流
国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...
- 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条IP递增流
国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...
- 解决Linux性能问题的前60秒
为了解决性能问题,你登入了一台Linux服务器,在最开始的一分钟内需要查看什么? 在Netflix我们有一个庞大的EC2 Linux集群,还有非常多的性能分析工具来监控和调查它的性能.其中包括用于云监 ...
- Linux 性能分析的前 60 秒
编译自:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html作者: Brendan Gregg转载自:h ...
- 仅需60秒,使用k3s创建一个多节点K8S集群!
作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...
随机推荐
- const和define的差别
1.const有什么用途?(1)可以定义const常量(2)const可以修饰函数的参数和返回值,甚至函数的定义体.被const修饰的东西都受到强制保护,可以预防以外的变动,能提高程序的健壮性. in ...
- 使用.NET Core与Google Optimization Tools实现员工排班计划Scheduling
上一篇说完<Google Optimization Tools介绍>,让大家初步了解了Google Optimization Tools是一款约束求解(CP)的高效套件.那么我们用.NET ...
- jquery控制input只能输入数字和两位小数
jquery代码 function num(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字" ...
- JavaScript -- Enumerator
-----022-Enumerator.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=&q ...
- js便签笔记(10) - 分享:json2.js源码解读笔记
1. 如何理解“json” 首先应该意识到,json是一种数据转换格式,既然是个“格式”,就是个抽象的东西.它不是js对象,也不是字符串,它只是一种格式,一种规定而已. 这个格式规定了如何将js对象转 ...
- springboot 多模块 -- 将web拆分出去 - 流动计算架构
前言: 之前将各层都拆分出去, 作为一个独立的可替换的子模块. 感觉比以前确实是灵活了一些. 不管是电商项目, 还是现在公司做的项目, 其中, 有很多的业务逻辑, 都是一样的, 但是由于不在一个系统中 ...
- Ceph/共享存储 汇总
Ceph 存储集群 - 搭建存储集群 Ceph 存储集群 - 存储池 Ceph 块设备 - 命令,快照,镜像 Ceph 块设备 - 块设备快速入门 OpenStack 对接 Ceph CentOS7 ...
- Spring总结 2.装配bean
本随笔内容要点如下: bean的作用域 占位符 一.bean的作用域 在默认情况下,Spring管理的bean的单例的.也就是说,无论注入多少次,都是同一个bean对象.一般情况下,单例模式是足以应付 ...
- <Think Python>中斐波那契使用memo实现的章节
If you played with the fibonacci function from Section 6.7, you might have noticed thatthe bigger th ...
- 快速把项目部署到webLogic上
weblogic简介BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应 用的Java应用服务器.将Java的动态功能和Java Enterprise标准的安全 ...