java jigsaw_60秒内使用Java 9的Project Jigsaw的JavaFX HelloWorld

java jigsaw

到目前为止,您可能已经听说过Java 9的新模块系统,即项目Jigsaw。 如果您不了解Java 9的新模块系统,则应该访问Mark Reinhold的论文“模块系统的状态” 。 另外,您应该在@nipafx上查看 Nicolai Parlog的优秀博客, 网址为http://blog.codefx.org。在那里,他详细介绍了Java 9的新模块系统和许多场景。

在本文中,我将尝试向您展示如何在60秒内使用Java 9的模块系统创建JavaFX Helloworld应用程序。

要求

在撰写本文时,Java 9仍处于早期访问阶段,这意味着您需要在https://jdk9.java.net/download/上获取最新版本。

  • JDK 9 EA bu​​ild 114或更高版本( JDK 9 EA )

使用说明

假设您已经安装了JDK并设置了适当的环境变量。 另外,您将需要进入命令提示符或终端并键入:java -version来验证已安装的JDK。 例如。

screen-shot-2016-04-25-at-12-09-37-am

步骤1:在主目录中为项目创建目录,例如分别用于Windows OS,Linux和MacOS的目录。 另外,在helloworld项目目录下创建一个src目录。

# Windowsc:\Users\myusername>md helloworldc:\Users\myusername>md helloworld/src# Linux/user/home/myusername $ mkdir -p helloworld/src# Mac/Users/myusername$ mkdir -p helloworld/srccd helloworld

步骤2:根据Java 9的新方法来组织源代码和模块,使用简单的命名约定创建目录。

创建一个名为模块的目录,例如: com.mycompany.helloworld 。 假设您的当前目录为<用户的主目录> / 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或记事本。

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);}@Overridepublic 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();}
}

步骤 5:   使用-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

步骤 6:   将Hello World应用程序作为模块执行。 将模块编译到mods目录中之后,您现在将使用Java 9的新-modulepath选项来指定编译后的模块目录。 另外,您将指定-m选项以执行该模块及其主类HelloWorld。 使用以下命令:

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

上一条命令的输出:

screen-shot-2016-04-26-at-1-42-13-am

结论

不知道您是否花费了60秒以上的时间,但是假设您的环境已设置并且JDK 9已安装,您应该能够在几秒钟内剪切和粘贴代码。 我发现新的Java 9模块系统非常简单。 尽管为了使编译器知道模块在哪里有一些额外的输入,但实际上它与-classpath选项没有什么不同。

我可以看到大型项目可以将组件分解为模块并从中受益。 我相信在Java世界中,这确实是令人兴奋的时刻,因为工具将能够构建精简的可执行文件,从而缩短加载时间。 我觉得这已经很长时间了,但是它是一个非常需要的功能,它将鼓励我们编写,管理和部署模块化软件。

翻译自: https://www.javacodegeeks.com/2016/04/javafx-helloworld-using-java-9s-project-jigsaw-60-seconds.html

java jigsaw

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

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

相关文章

opencv python 多帧降噪算法_OpenCV-Python中用于视频跟踪的Meanshift和Camshift算法介绍...

学习目标在本章中&#xff0c;我们将学习用于跟踪视频中对象的Meanshift和Camshift算法。MeanshiftMeanshift背后的直觉很简单&#xff0c;假设你有点的集合。(它可以是像素分布&#xff0c;例如直方图反投影)。你会得到一个小窗口(可能是一个圆形)&#xff0c;并且必须将该窗口…

vue.jsr入门_JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性

vue.jsr入门Java 8引入了JSR-308&#xff0c;它为Java语言添加了新的注释功能。 最重要的是&#xff1a;键入注释。 现在可以像下面这样设计怪物了&#xff1a; 比注解更疯狂的是类型注解。 在数组上。 谁认为这是有效的Java代码&#xff1f; pic.twitter.com/M9fSRRerAD — …

数组索引必须为正整数或逻辑值_Office 365函数新世界——动态数组

革新一个旧的函数体系&#xff0c;无外乎从这么几个方面入手&#xff0c;函数的运行效率、函数的编写方式以及扩展新的函数功能。今天咱们就学习一下&#xff0c;看看365新函数是如何通过这三个方面打破旧函数条条框框的。365函数系列推出了一个新的概念&#xff0c;叫做动态数…

【Android OpenGL ES 开发 (零)】创建一个新的工程

创建符合要求的AndroidApp 使用Android Studio开发&#xff0c;Android Studio下载地址 1.先创建Native C 2.项目相关添加 3.使用C11标准 学习使用JNI为Java提供API 1.在cpp中定义相关接口&#xff0c;格式如下 2.外部调用这个API 把so改成自己想要的名字 1.需要在cmake文件…

java方法参数类型不确定_一个Java方法能有多少个参数类型?这个好奇coder做了个实验...

选自 justinblank机器之心编译参与&#xff1a;李志伟、张倩在 JVM 中&#xff0c;一个 Java 方法&#xff0c;最多能定义多少参数呢&#xff1f;这是一个很无聊的问题&#xff0c;即使能定义一万个&#xff0c;十万个&#xff0c;谁又会真的去这么做呢。但是作为一个 coder&am…

lagom的微服务框架_您的第一个Lagom服务– Java Microservices入门

lagom的微服务框架在撰写我的下一份OReilly报告时&#xff0c;我一直很沮丧&#xff0c;并且一段时间内没有足够的时间来撰写博客。 是时候赶快来这里&#xff0c;让您真正快速地开始使用名为Lagom的新微服务框架。 它与您从Java EE或其他应用程序框架中可能了解到的有所不同。…

【Android OpenGL ES 开发 (一)】使用c++开发opengles 与 日志功能 及 加载assets

创建OpenGLES视口 1.App窗口改成OpenGL窗口,是通过java调用C&#xff0c;在以下位置修改如下内容 package com.example.learnogles;import androidx.appcompat.app.AppCompatActivity;import android.content.Context; import android.opengl.GLSurfaceView; import android.o…

水印相机定位不准确怎么办_禄来的广角双反相机(2020版)

点击上方胶卷迷俱乐部快速关注&#xff0c;胶卷迷们坚实的阵地内容主要原创&#xff0c;配图来自群友和网络&#xff0c;所有水印保留最下方为微信自带广告&#xff0c;支持请点击(本号可获微量收入)4.0德国禄来公司以双反相机名震天下&#xff0c;其中的2.8&#xff0c;3.5两个…

【Android OpenGL ES 开发 (二)】渲染管线与Shader

计算出每一帧耗费的时间 1.在头文件中加入time.h,cpp中实现如下计算时间接口 float GetFrameTime(){static unsigned long long lastTime0,currentTime0;timeval current;gettimeofday(&current, nullptr);//取当前时间currentTime current.tv_sec * 1000 current.tv…

【Android OpenGL ES 开发 (三)】Shader 扩展

编译Shader代码 1.封装一个编译shader的接口 GLuint CompileShader(GLenum shaderType,const char *shaderCode){GLuint shaderglCreateShader(shaderType);glShaderSource(shader,1,&shaderCode,NULL);glCompileShader(shader);GLint compileResultGL_TRUE;glGetShaderi…

css阴影属性_第三场阴影场与属性访问器接口

css阴影属性这是“ 影子字段与属性访问器”界面的 第3轮 。 如果您是新手&#xff0c;但不确定要怎么做&#xff0c;请查看我以前的文章或关于开发JavaFX应用程序时节省内存的第一篇文章 。 作为Java开发人员&#xff0c;我主要关心的是在开发JavaFX域模型时在性能 &#xff0c…

js if判断多个条件_JS条件判断小技巧(一)

经常code review&#xff0c;我发现JS newbie很容易写出一堆冗长的代码。今天就列几个比较常见的“解决之道”&#xff0c;看看如何减少JS里的条件判断。提前返回&#xff0c;少用if...else“if...else是编程语言的精华。——鲁迅”但是过多的嵌套&#xff0c;还是挺令人抓狂的…

【Android OpenGL ES 开发 (四)】纹理相关(一)

纹理贴图的原理 1.作用&#xff1a;可以用来渲染视频。 2.纹理坐标 生成OpenGL中的纹理对象 1.像素数据想要绘制出来需要先变成纹理 2.创建纹理放在GPU上 GLuint CreateTexture2D(unsigned char *pixelData,int width,int height,GLenum type) {GLuint texture;glGenTextu…

jmx 替代_使用JMX作为Ganglia的现代替代品进行CLDB监视

jmx 替代有许多选项可用于监视MapR集群的性能和运行状况。 在本文中&#xff0c;我将介绍使用Java管理扩展&#xff08;JMX&#xff09;监视CLDB的鲜为人知的方法。 据最受尊敬的MapR数据工程师之一&#xff0c;Akihiko Kusanagi称&#xff0c;与使用Ganglia相比&#xff0c;使…

red hat安装宝塔_如何在几分钟内安装Red Hat Container Development Kit(CDK)

red hat安装宝塔作为负责开发容器化应用程序提供的可能性的应用程序开发人员或架构师&#xff0c;将所有工具组合在一起以帮助您入门时几乎没有帮助。 到现在。 红帽容器开发套件&#xff08;CDK&#xff09; 安装变得简单&#xff01; 红帽提供了一个容器开发套件&#xf…

threejs 影子属性_影子场vs.属性访问器接口第2轮

threejs 影子属性如果你们还没有注意到Dirk Lemmerman和我之间的&#xff08;轻松&#xff09; 摊牌 &#xff0c;那么让我快速提及一下我们是如何做到这一点的。 首先&#xff0c;Dirk创建了JavaFX技巧23&#xff1a;“ 为属性保存内存阴影字段 ”&#xff0c;以帮助应用程序开…

【OpenGL从入门到精通】Shader专题

详解GPU的工作流程 1.shader通常称为着色器&#xff0c;作用是把CPU上的点渲染出来。 2.shader是并行的。 3.流程&#xff1a;数据data (顶点数据) ----->VS(输入&#xff1a;data的顶点数据&#xff0c;输出&#xff1a;gl_Position的 vec4 顶点数据)----->光栅化处理…

【OpenGL从入门到精通(六)】纹理对象与纹理坐标

1.在OpenGL想要显示一张图片&#xff0c;需要先绘制一个自定义的几何体。 2.把图片加载到纹理对象中 3.当进行纹理贴图时候&#xff0c;使用纹理坐标来设置纹理对象。 2.

yeoman_具有Spring Boot和Yeoman的单页Angularjs应用程序

yeoman我非常感谢yeoman之类的工具&#xff0c;这些工具提供了一种非常快速的方法来将不同的javascript库组合在一起成为一个一致的应用程序。 Yeoman提供了UI层&#xff0c;如果您需要开发服务层和静态资产的Web层&#xff0c;则打包的一种好方法是使用Spring Boot 。 我知道有…