【编者按】本文作者为 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 程序?的更多相关文章

  1. Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能 先到官网(http://plugins.jquery.com/cookie/ )下载coo ...

  2. 60秒定位问题,十倍程序员的Debug日常

    作者:陶建辉 这是我在 2020 年 5 月写的一篇内部博客,当时是希望研发和技术支持同学能够帮助用户快速定位 Bug,解决问题.2020 年 12 月我又迭代了一版,并还针对此进行了内部的培训.这段 ...

  3. 如何在Etherscan.io 部署ETH以太坊智能合约 如何在15分钟内创建你的加密货币

    一.概述 ETH 网络这里就不介绍了,这篇文章主要记录在以太坊主网和测试网络部署一个智能合约,也就是如何发币. 二.部署合约需要的生产工具      准备工具前,建议大家准备个VPN,因为会访问国外网 ...

  4. 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条源/目标MAC地址号递增流

    国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...

  5. 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条UDP/TCP端口号递增流

    国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...

  6. 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条IP递增流

    国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...

  7. 解决Linux性能问题的前60秒

    为了解决性能问题,你登入了一台Linux服务器,在最开始的一分钟内需要查看什么? 在Netflix我们有一个庞大的EC2 Linux集群,还有非常多的性能分析工具来监控和调查它的性能.其中包括用于云监 ...

  8. Linux 性能分析的前 60 秒

    编译自:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html作者: Brendan Gregg转载自:h ...

  9. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...

随机推荐

  1. C++与C的联系与区别

    C++与C的联系: C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛.C++支持多种编程范式 --面向对象编程.泛型编程和过程化编程. 其编程领域众广,常用于系统开发,引擎开发等应用领域, ...

  2. 牛客网Java刷题知识点float数据在内存中是怎么存储的

    不多说,直接上干货! float类型数字在计算机中用4个字节存储. 遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e (1)底数部分 使用二进制数来表示此浮点数的实际值 (2)指 ...

  3. 用Javascript开发网页截屏插件

    实现思路用html2canvas.js将元素转换成canvas,在将canvas转成图片. html2canvas(document.body, { onrendered: function(canv ...

  4. filebeat-2-通过kafka队列链接logstash

    filebeat 直接到logstash, 由于logstash的设计问题, 可能会出现阻塞问题, 因为中间使用消息队列分开 可以使用redis, 或者kafka, 这儿使用的是kafka 1, 安装 ...

  5. Leetcode 759. Employee Free Time

    思路:区域覆盖问题.一个自然的想法是将每个员工的工作时间段看做一个木棒,每个木棒的长度就是这个时间段的时长.然后按照木棒的起始位置升序排列,接着由低位置向高位置一个木棒一个木棒的看过去.如果当前木棒的 ...

  6. PTA (Advanced Level) 1006 Sign In and Sign Out

    Sign In and Sign Out At the beginning of every day, the first person who signs in the computer room ...

  7. Oracle Comment 获取并修改表或字段注释

    select * from dba_tables where owner = 'DINGYINGSI'; select * from user_col_comments where table_nam ...

  8. 使用Unicode字符实现换行

    要让inline元素换行可以使用Unicode字符实现: <!DOCTYPE html> <html lang="en"> <head> < ...

  9. maven3.6.1-02初体验及jar包上传

    安装当前最新版本的nexus,安装教程网上搜,不多说了. 因为nexus3x版本没有2x版本中内置的3rd_part,所以不能在界面中上传jar包,必须使用maven的命令行.  添加第三方仓库,名字 ...

  10. Git Windows客户端保存用户名和密码

    解决Git Windows客户端保存用户名和密码的方法,至于为什么,就不想说了. 1. 添加一个HOME环境变量,值为%USERPROFILE% 2. 开始菜单中,点击“运行”,输入“%Home%”并 ...