`
iaiai
  • 浏览: 2198028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我的Java(定制你的Java/JavaFX Runtime)

    博客分类:
  • J2EE
 
阅读更多
最新的JDK 11发布了,撒花

新版本的JDK终于有了openjdk的build提供下载鸟,总算可以让oracle jdk去死一死了,建议所有用户全部转向openjdk以避免oracle那帮闲着无聊的法务部的骚扰和监视//crossing my fingers

嗯,随着JDK 11的发布,一些重大的变化也开始显现出来,一个明显的问题就是,在JavaFX相关的群里,不断会有萌新问,找不到runtime blablabla,嗯,因为JavaFX在新版本中已经从标准JDK中拆除出来,成为了一个独立的项目,这个是他们现在的网址:
https://openjfx.io/
那我们下面说一下如何用最新版本的JavaFX,说实话,看到这么多人用JavaFX让我异常意外,不是说好的这玩意没前途嘛?必死无疑嘛?这么多人冒出来是肿么肥四?

看来只要是Java的东西,天生就会有一大堆开发者群体,只要做得好,就不愁用户

好了,程序员嘛,有问题解决问题,既然我们知道了问题,那下面就说一下怎么解决问题

如果你只是想在idea中用上javafx的话,那参考一下上面网址中的maven项目,照着做就可以了,很简单,唯一有一点点麻烦的就是在测试的时候,需要用compile exec:java -f pom.xml来启动测试,idea中run configuration的截图如下:

然后确定,然后双击就可以启动了,是不是很方便呢?

然后就可以开始写代码啦,new一个maven的project,一路按照向导点下去,生成之后,这是测试代码:
package com.whitewoodcity;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class Hello extends Application {

  @Override
  public void start(Stage stage) {
    String javaVersion = System.getProperty("java.version");
    String javafxVersion = System.getProperty("javafx.version");
    Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
    Scene scene = new Scene(l, 640, 480);
    stage.setScene(scene);
    stage.show();
  }

  public static void main(String[] args) {
    launch();
  }

}

然后用maven来编译,就能在target的com/whitewoodcity文件夹下看到该Hello.class啦,然后执行刚才生成的run,就能在idea中看到效果了,ide截图如下,参考:

但是,要发送给用户的话,这样做还是不够滴,我们还需要定制我们的jre,哇哇哇,想想都激动,我的Java,听起来像是我的世界那么有趣,来看看肿么操作,其实也不难

首先我们打开openjdk的压缩包,看看它的结构,朴实无华,普通得不能再普通,你都能凭借经验猜出来,它到底是怎么搞的,有一个bin目录,里面有着所有的命令和工具,那要定制我的java或者jre,我们需要用到的是jlink这个命令,那这个命令输入help,就能看到相关参数,latte大鸟曾经说,不懂我就help,这是个好习惯,不妨学习一下,搞挨踢就应该这样,不懂你就help,看看命令会提示你什么,其实看看也能猜出来是怎么操作的

然后去http://openjfx.io上下载jmods,你要做什么操作系统上的jre,就下对应os上的jmod,比如我是macosx,那么我就下这个JavaFX Mac OS X jmods,下载完解压缩,会看到里面会有一些jmods文件,如图:

嗯,对,我升级到了MoJave,你看这名字都像是MyJava,天意?

然后我们再打开openjdk的文件夹,会看到有一个jmods的文件夹,那这两个jmods文件夹里的jmods就是我们的原材料啦,我们会用这些jmods做出一个我们自己的jre,我的Java,myJava

第一步先拷贝javafx.*.jmods到openjdk下jmods文件夹,mv,cp,或者打开finder拖,随便你

第二步执行命令,命令就是jlink啦,我们到Home文件夹下,执行以下命令:
bin/jlink --module-path jmods --add-modules java.base,javafx.base,javafx.graphics,javafx.controls --output myjava

嘎吱嘎吱一阵之后,在ls一下,就能看到多了一个myjava的文件夹,这个就是我的java啦

因为我们只用到了java.base, javafx.base, javafx.graphics, javafx.controls四个模块,其他的暂时用不到,如果将来你用到了,需要重新制作你的java runtime,不再赘述

第三步把javafx那三个jmods对应的jars下载下来,放入刚刚做好的myjava/lib中去,jars在maven central上有,任何时候找不到jars,就去Maven Repository上搜是一个好习惯,下载这几个jars:javafx-basejavafx-controlsjavafx-graphics,下载下来后记得拷贝到myjava/lib里面去//这一步似乎不是必需的,可以省略,因为有了jmod,应该不需要再有jar了,但是似乎我在某一次操作的时候遇到了没有jar的问题,先留在这里,留作备份

第四步拷贝,我们再把刚才maven项目中生成的com/whitewoodcity/Hello.class整个文件夹拷贝过来,然后再把刚才做好的myjava文件夹也拷贝过来,这样我们就有了两个文件夹:

com文件夹下面是whitewoodcity/Hello.class

再然后就简单啦,我们已经有了我的java,那么启动myjava/bin/java就好啦,当然还要给这个命令喂一下参数,告诉它我们的main class在哪里,就是刚才的Hello.class啦
myjava/bin/java com.whitewoodcity.Hello

搞定,下图是效果:

有了命令之后,我们就可以再根据不同的os定制脚本文件,比如win下的bat,mac/linux下的bash,随便了

然后再将bat做成exe,这个工具网络上随便搜,大把,不做也没啥,无非启动时候黑一下

做成exe之后,你可以把黑一下给去掉

再然后你就可以将你的游戏上传steam上去,然后告诉steam分别在不同的os下该启动哪些命令……

如果没有steam这种平台的话,你可以做成installable files,比如macosx下的dmg,win下的exe,win下用innosetup就行了,mac下自带有工具,网络上搜一下也挺多教程的,不难

这个事情其实也给了我们一点点启迪,就是将来如果打算做一个java的游戏引擎的话,尤其是3d的图形处理,肯定要封装gpu相关的底层图形库,比如macosx下的mental,开源的vulkan(fuchsia和linux都会选择vulkan,opengl会被deprecated掉)win下的d3d这些,那么可以通过jmod的方式集成到runtime中去,JavaFX就是这么干的,可以参考JavaFX的源码,在github上有,http://openjfx.io首页上有链接

记得JavaFX群里曾经有人抱怨过说,JavaFX的3d图形api还不够强大,尤其是缺少shader等工具,嗯,那现在就有办法贡献了,有识之士可以开工了
  • 大小: 14.3 KB
  • 大小: 32.7 KB
  • 大小: 24.5 KB
  • 大小: 11 KB
  • 大小: 7.2 KB
分享到:
评论

相关推荐

    Java Runtime Environment1.8.0

    Java Runtime Environment 1.8.0是Java开发和运行应用程序必不可少的一部分,它是Oracle公司发布的Java平台标准版(Java SE)的实现。这个版本是32位的,这意味着它设计用于在32位操作系统上运行,比如Windows XP、...

    java_jre15已集成JavaFX16

    Java JRE 15 已集成 JavaFX 16 是一个重要的更新,它标志着Java开发环境的进一步完善,特别是对于那些依赖JavaFX图形库的开发者来说。JavaFX是Oracle剥离出来的一个独立的开源UI框架,提供了丰富的用户界面控件和...

    java1.8版本,jre,jfx

    Java 1.8 版本是Oracle公司发布的一个重要的Java开发和运行环境,...通过这个压缩包,你可以获得运行和开发Java 1.8应用程序所需的所有核心组件,包括JDK和JRE,以及JavaFX的集成,这将帮助你构建丰富的图形界面应用。

    Apress.Learn JavaFX 8

    Java had the support for ...the JavaFX runtime along with the Java runtime in the JRE. Now JavaFX 8 is considered a real successor for Swing for building the GUI application using the Java platform.

    在IntelliJ IDEA 中使用 Gradle JavaFx

    - 在“项目SDK”中选择你的Java版本,因为JavaFX自Java 11起不再包含在JDK中,所以需要使用支持JavaFX的JDK,如OpenJFX。 - 在“项目模板”中,选择“Empty Project”。 2. **配置Gradle构建脚本**: - 创建`...

    Learn JavaFX 8 原版PDF by Sharan

    Java had the support for ...the JavaFX runtime along with the Java runtime in the JRE. Now JavaFX 8 is considered a real successor for Swing for building the GUI application using the Java platform.

    Arcgis的Java语言二次开发Jar包

    这些Java Jar包包含了丰富的API,涵盖了地图显示、数据处理、空间分析和地理编码等多个方面,使得开发者能够定制化地创建GIS应用程序,满足特定业务需求。 在描述中提到的“齐全、实用”是指这个Java开发包包含了...

    javafx使用指南-目录版.pdf

    JavaFX 是一个基于 Java 语言的软件平台,用于开发桌面应用程序、移动应用程序和网络应用程序。它提供了一个统一的编程模型,可以跨平台运行,具有高清晰度的图形用户界面和多媒体支持。 JavaFX 的主要特点包括: ...

    Java基础教程完整版

    Java的运行机制包括Java虚拟机(JVM)、Java Runtime Environment(JRE)和Java Development Kit(JDK)。JDK是Java开发人员必备的工具,包括JDK的安装、环境变量的配置、常用命令的使用等。 Java学习系列(二):...

    JavaFX+官方教程:RIA+应用开发

    总的来说,JavaFX是Java开发者构建富互联网应用程序的强大工具,通过学习这个官方教程,你将掌握如何利用其特性来开发功能丰富、界面美观的跨平台应用。教程会涵盖基础概念、控件使用、布局管理、事件处理、动画制作...

    Java项目制作可执行程序与安装程序_java_

    它可以将Java应用打包成一个独立的可执行文件,包含JRE(Java Runtime Environment)的一部分,使得用户无需预先安装Java就能运行程序。在本项目中,开发者使用Exe4j将JavaFX应用转换成了EXE格式,便于Windows用户...

    java定时关机小程序

    Java定时关机小程序是一种利用Java编程语言实现的实用工具,它可以按照用户设定的时间自动关闭计算机。这个程序在日常生活中或企业环境中非常有用,比如在执行大量计算任务后自动关闭电脑,或者在无人值守时进行系统...

    java压缩包不用安装

    3. **Java运行时环境**: JRE提供了运行Java程序所需的库和环境,包括基础类库如Java标准类库(Java Standard Library)和JavaFX,以及垃圾收集器(Garbage Collector)用于自动内存管理。 4. **Java应用程序接口...

    java编写的java简易编辑器

    在Java Swing或JavaFX库中,通常会创建一个JFrame对象作为应用程序的主窗口,并在其上添加各种组件,如菜单栏、工具栏、文本区域等。EditorFrame可能会包含一个JTextArea或JTextPane用于显示和编辑代码,以及一些...

    基于javaFX的简易定制化的自动部署

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的框架,它扩展了Java SE的功能,提供了丰富的用户界面组件和强大的图形渲染能力。在这个"基于JavaFX的简易定制化自动部署"项目中,我们关注的是...

    java做的世界杯程序

    而“直接运行”表明程序是可执行的,用户下载后无需编译即可启动,这通常得益于Java的“写一次,到处运行”的理念,通过JRE(Java Runtime Environment)就能在各种操作系统上运行。 “画面漂亮”可能暗示这个程序...

    java轻松上手PDF文件,从JAVA简介、程序设计环境的建立,到高级UGI设计

    它会解释Java是如何通过JVM(Java虚拟机)实现这一特性的,并介绍Java的核心组件,如JDK(Java Development Kit)和JRE(Java Runtime Environment)。 接下来,"程序设计环境的建立"章节会指导读者如何安装配置...

    基于Java实现的远程截屏考勤系统,该软件开始工作后会根据配置文件的设置进行屏幕截图

    jlink --module-path 模块地址 --add-modules java.base,java.compiler,java.management,java.naming,jdk.naming.dns,java.datatransfer,java.desktop,java.logging,java.prefs,java.scripting,java.xml,javafx.base...

Global site tag (gtag.js) - Google Analytics