> 文章列表 > JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

1、官网

JavaFX中文官方网站、Oracle官方文档

2、教程

JavaFX中文基础教程视频合集
JavaFX实战教程

3、VSCode/Eclipse

VSCode(写HelloWorld用)、VSCode的Java扩展

Eclipse,跳至第9段

4、Liberica JDK安装

Liberica JDK官网下载
依次选择,All versions,Java 17 (LTS),Release Version选一个最新的,Windows,x86,64 bit,Full JDK
(必须是Full JDK这个版本的,因为这个版本才自带JavaFX)
点击下载MSI格式

5、手打HelloWorld代码

新建一个文件夹Hello,在文件夹内新建文件Hello.java,内容如下
(既然是HelloWorld,用记事本或者VSCode打开文件夹就行了)

public class Hello {public static void main(String[] args) {System.out.printf("hello world");}
}

6、运行HelloWorld

javac .\\Hello.java;java Hello
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

7、修改代码,加入javafx

  1. Hello继承javafx.application.Application
    所以先导入,然后extends Application
    import javafx.application.Application;public class Hello extends Application{public static void main(String[] args) {System.out.printf("hello world");}
    }
    
  2. 此时VSCode会将Hello类标红,并提示你需要写一个start方法
    JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
  3. 点击快速修复…(Ctrl+,),点击Add unimplemented methods,自动生成start函数,自动导入javafx.stage.Stage
    (手写也不是不行其实)
    JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
  4. 删除这两行
    		// TODO Auto-generated method stubthrow new UnsupportedOperationException("Unimplemented method 'start'");
    

    改为

    		primaryStage.show();
    
  5. 用不着抛异常,所以删除字符串throws Exception
    JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
  6. 调用 javafx 中的 launch(启动 JavaFX 应用程序的入口点)
    	public static void main(String[] args) {System.out.printf("hello world");}
    

    改为

    	public static void main(String[] args) {launch(args);}
    
  7. 快捷键Shift+Alt+F格式化代码,最终代码
    JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

8、运行

javac .\\Hello.java;java Hello
运行效果,显示一个什么也没有的窗口
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

9、下载IDEA

访问IDEA官网下载地址下载 IntelliJ IDEA 的 Community Edition 版本
勾选用户协议点击Continue,数据分享点击Dont't Send

10、设置IDEA

左侧栏,Customize,All settings…

代码提示快捷键:Keymap,MainMenu,Code,Code Completion
右键Cyclic Expand Word,Remove Alt+/
右键Basic,Remove Ctrl+空格
右键BasicAdd Keyboard Shortcut,按下Alt+/,点击OK
点击Apply

UTF-8编码:Editor,File Encodings
Global EncodingProject Encoding都选择UTF-8,点击Apply

自动导入:Editor,General,Auto Import
勾选Add unambiguous imports on the flyOptimize imports on the fly,点击Apply

大小写模糊匹配:Editor,General,Code Completion
取消Match case(没人会记得代码叫Length/length/Size/size/len/Len/getlen/strlen,还匹配大小写呢,给自己的人生增加难度,生怕找到这个方法是吧)
点击Apply

关闭自动更新:Appearance & Behavior,System Settings,Updates
取消勾选Check IDE updates forCheck for plugin updates,点击Apply

打开超多文件时不隐藏:Editor,General,Editor Tabs
取消勾选Show tabs in one row,点击Apply

显示方法分割线:Editor,General,Appearance
勾选Show method separators,点击Apply

自动缩进注释位置:Editor,Code Style,Java,Arrangement右边,Code Generation(将窗口全屏,设置被折叠了)
取消勾选Line comment at first column,点击Apply
自动缩进注释位置HTML:HTML中的Code Generation
取消勾选Line comment at first columnBlock comment at first column,点击Apply

自动编译:Build, Execution, Deployment,Compiler
勾选Build project automatically,点击Apply

10、新建项目

点击New Project
Name输入hijavafx
点击Create
等待加载
等待右下角更新索引
如果出现下载预建索引提示,点击Always download即可
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

11、运行项目

右上角,点击绿色三角形图标(Shift+F10),运行,底部控制台将显示运行结果
(i到5的循环是IDEA自带的)
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

12、格式化代码IDEA

Ctrl+Alt+L格式化代码

13、添加javafx代码

public class Main

改为

public class Main extends Application

IDEA将自动添加import语句
IDEA将public class Main extends Application标红并提示需要写一个start方法
点击Implement methods(Alt+Shift+Enter),保持默认实现设置,点击OK自动添加
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
删除prinf语句和for循环,删除字符串throws Exception,删除自动生成的注释
main函数中添加launch(args);
start函数中添加primaryStage.show();
最终代码如下

import javafx.application.Application;
import javafx.stage.Stage;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) {primaryStage.show();}
}

运行,成功显示空白窗口

14、添加窗口标题

在start中使用setTitle方法添加窗口标题

    @Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("hiJavaFX");primaryStage.show();}

15、添加窗口图标

15.1 准备图片

准备一张图片
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

15.2 在IDEA中导入图片

右键文件夹src,New,Directory,命名为resources
右键resources,New,Directory,命名为images
复制图片文件,选中images,Ctrl+V粘贴,图片文件命名为icon.png,点击OK

15.3 复制图片路径

右键resources下的images下的icon.pngCopy Path/Reference…,选择Path From Content Root

15.4 编写代码

在start中使用getIcons方法添加窗口图标

    @Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("hiJavaFX");String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();primaryStage.getIcons().add(new Image(IconUrl));primaryStage.show();}

16、设置窗口尺寸

在start中使用setWidth方法和setHeight方法设置窗口尺寸

    @Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("hiJavaFX");String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();primaryStage.getIcons().add(new Image(IconUrl));primaryStage.setWidth(400);primaryStage.setHeight(300);primaryStage.show();}

17、禁止修改窗口尺寸

在start中使用setResizable方法向其传入false,禁止修改窗口尺寸

    @Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("hiJavaFX");String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();primaryStage.getIcons().add(new Image(IconUrl));primaryStage.setWidth(800);primaryStage.setHeight(300);primaryStage.setResizable(false);primaryStage.show();}

18、加载一张背景图片

18.1 准备图片

JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

18.2 在IDEA中导入图片

复制图片文件,选中images,Ctrl+V粘贴,图片文件命名为background.png,点击OK

18.3 写代码

primaryStage里加载一个Scene,Scene里加载一个Pane,使用Pane的setBackground方法设置背景图片

    @Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("hiJavaFX");String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();primaryStage.getIcons().add(new Image(IconUrl));primaryStage.setWidth(800);primaryStage.setHeight(300);primaryStage.setResizable(false);Pane root = new Pane();String BackgroundImageUrl = this.getClass().getResource("/resources/images/background.png").toString();BackgroundImage backgroundImage = new BackgroundImage(new Image(BackgroundImageUrl),null,null,null,new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO, false, false, true, true));root.setBackground(new Background(backgroundImage));Scene scene = new Scene(root);primaryStage.setScene(scene);primaryStage.show();}

19、显示文字

添加两个label,显示文字

    @Overridepublic void start(Stage primaryStage) {// 省略root.setBackground(new Background(backgroundImage));Label label = new Label("JavaFX");label.setStyle("-fx-font-size: 45px; -fx-text-fill: black;");label.setLayoutX(315);label.setLayoutY(26);root.getChildren().add(label);Label label2 = new Label("  JavaFX是一个开源的下一代客户端应用平台,适用于基于\\n" +"Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公\\n" +"司的共同努力的成果,目的是为开发丰富的客户端应用提供\\n" +"一个现代、高效、功能齐全的工具包。");label2.setStyle("-fx-font-size: 27px; -fx-text-fill: black;");label2.setLayoutX(28);label2.setLayoutY(101);root.getChildren().add(label2);Scene scene = new Scene(root);primaryStage.setScene(scene);primaryStage.show();}

20、换一张无字背景图

导入这张图,命名为background2.png
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

String BackgroundImageUrl = this.getClass().getResource("/resources/images/background.png").toString();

改为

String BackgroundImageUrl = this.getClass().getResource("/resources/images/background2.png").toString();

21、最终效果

JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javafx.stage.Stage;import java.io.File;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("hiJavaFX");String IconUrl = this.getClass().getResource("/resources/images/icon.png").toString();primaryStage.getIcons().add(new Image(IconUrl));primaryStage.setWidth(800);primaryStage.setHeight(300);primaryStage.setResizable(false);Pane root = new Pane();String BackgroundImageUrl = this.getClass().getResource("/resources/images/background2.png").toString();BackgroundImage backgroundImage = new BackgroundImage(new Image(BackgroundImageUrl),null,null,null,new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO,false, false, true, true));root.setBackground(new Background(backgroundImage));Label label = new Label("JavaFX");label.setStyle("-fx-font-size: 45px; -fx-text-fill: black;");label.setLayoutX(315);label.setLayoutY(26);root.getChildren().add(label);Label label2 = new Label("  JavaFX是一个开源的下一代客户端应用平台,适用于基于\\n" +"Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公\\n" +"司的共同努力的成果,目的是为开发丰富的客户端应用提供\\n" +"一个现代、高效、功能齐全的工具包。");label2.setStyle("-fx-font-size: 27px; -fx-text-fill: black;");label2.setLayoutX(28);label2.setLayoutY(101);root.getChildren().add(label2);Scene scene = new Scene(root);primaryStage.setScene(scene);primaryStage.show();}
}

22、打包jar

(打包之前清理一下图片,使用了background2.png但是没用background.png,那么就可以删除background.png再打包)
IDEA,菜单栏,File,ProjectStructure…(Ctrl+Alt+Shift+S),Artifacts
(右侧如果有内容则点击-清空)
点击+,JAR > From modules with dependencies…,
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
选择Main Class,(其他网上教程说要修改META-INF的目录,可是IDEA已经改好了,就是以src结尾的,不用改了)
点击OK,点击OK
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
你以为下一步是点击+,添加图片目录?错,直接点击OK
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
菜单栏,Build,Build Artifact,Build
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
打包位置:IdeaProjects\\hijavafx\\out\\artifacts\\hijavafx_jar\\hijavafx.jar
打包后和打包前效果一致,图片显示正常(jar文件大小56KB,bankground2.png30多KB,icon.png20多KB,正好对应上)

23、打包EXE(exe4j)(自带jre)

23.1 告知exe可执行文件,去固定位置找jre

模仿第24步,重点在exe4j的第6步,配置JRE的步骤
Minimum version和Maximum version都输入17

展开高级选项,点击Search sequence
清空自带的设置项(你总不能指望别人安装的jre恰好还自带javafx吧)

点击绿色加号,类型设置为Directory,Directory手动输入.\\jre,点击确定
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
点击下一步
Choose the preferred VM使用默认设置,点击下一步
其余操作继续参考第23步生成exe文件

23.2 只是告知exe去固定位置找jre是没用的,你得真的给他一个jre

参考步骤4下载一份JRE
此时Package Type选择Full JRE,用不着Full JDK
下载ZIP格式的

解压后的文件夹改名为jre,并放置到exe4jfolder文件夹
路径举例:exe4jfolder\\hijavafx.exe
路径举例:exe4jfolder\\jre\\bin\\client\\jvm.dll

清理exe4jfolder文件夹,只保留hijavafx.exe和解压的jre文件夹
双击exe可以运行
(嫌jre文件夹太大的可以自行精简jre)

24、打包EXE(exe4j)(需要jre)

24.0 注册exe4j

去搜索引擎搜索exe4j的密钥\\注册码,此处省略

24.1 新建文件夹

新建文件夹,命名为exe4jfolder,用于放置打包exe的所需文件

24.2 复制jar包

IdeaProjects\\hijavafx\\out\\artifacts\\hijavafx_jar\\hijavafx.jar复制一份放置到exe4jfolder文件夹

24.2 准备一个ico图标

下载greenfish,用项目中的icon.png生成一个icon.ico放置到exe4jfolder文件夹

24.3 下载安装exe4j

exe4j下载地址

24.4 使用exe4j将jar打包成exe

打开exe4j,点击下一步跳过欢迎界面,每完成一步都点击下一步按钮(exe4j只认下一步按钮,老老实实按就行了)
2. Proect type"JAR in EXE" mode
3. Application info
Short name of your application:hijavafx
Output directory:选择exe4jfolder文件夹
4. Executable info
Executable type:已经选择了GUI application,所以不用动
Executable name:hijavafx
勾选Icon File,并选择exe4jfolder文件夹中的icon.ico文件
5. Java invocation
点击绿色加号,Archive选项选择exe4jfolder文件夹中的hijavafx.jar文件
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
Main class from Class path:选择Main,确定
6. JRE
Minimum version:17
Maximum version:17
7. Splash screen:点击下一步按钮跳过
8. Message:点击下一步
到第9步时,软件将运行,并提示exe4j has finished
点击Exit退出软件
生成位置:exe4jfolder\\hijavafx.exe

24.5 运行

运行时会提示该软件由exe4j生成,这是因为这个软件是付费软件
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
在新电脑上会找不到JRE。
???还得装JRE你打的什么包?会装jre我用你说???
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

25、打包EXE(launch4j)(自带jre)

访问保存在sourceforge上的launch4j,下载launch4j
新建文件夹launch4jfolder,里面放hijavafx.jar,icon.ico和一份Liberica的jre
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
设置截图中的Output fileJarIcon三项
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
删除默认值
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
改为./jre,并填写搜索版本(这软件死脑筋,一个填17.0.7,另一个必须得17.0.6或者其他小一号的版本)
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
点击齿轮图标保存一个xml格式的配置文件到launch4jfolder文件夹后自动生成exe
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
生成完毕
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
运行报错(说明确实是找到了jre位置了),点确定当没看见就行了,软件成功运行
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

29、(放弃)下载Eclipse安装器

2023‑03版本

  1. 南京大学镜像站下载eclipse-inst-jre-win64.exe
  2. 清华大学镜像站下载eclipse-inst-jre-win64.exe
  3. 中国科学技术大学镜像站下载eclipse-java-2023-03-R-win32-x86_64.zip(这个是Eclipse本体)
  4. 访问Eclipse官网,直接点击下载
  5. 访问历史版本下载其他版本,例如2020-12版本

30、(放弃)运行Eclipse安装器,安装Eclipse

打开eclipseinstaller by Oomph
点击第一项Eclipse IDE for Java Developers
自动生成JDK路径和安装目录设置,可以不用改动
直接点击INSTALL安装
将会弹出用户协议,点击Accept Now
安装完毕后关闭eclipseinstaller by Oomph

31、(放弃)配置Eclipse

开始菜单找到并打开Eclipse IDE for Java Developers - 2023-03
Workspace可以设置为其他目录,点击Launch

31.1 设置中文

访问语言包下载地址
菜单栏,Help,Install New Software…
点击Add

南京大学镜像:https://mirrors.nju.edu.cn/eclipse/technology/babel/update-site/latest/
清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/eclipse/technology/babel/update-site/latest/
中国科学技术大学镜像:https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/latest/

选择一个链接填到Location
点击Add,Pending等待加载
列表向下滑找到并勾选Babel Language Packs in Chinese (Simplified)
取消勾选Contact all update sites during install to find required software
点击Next >,点击Next >
勾选I accept the terms of the license agreement
点击Finish
等待安装
弹出Trust界面,点击Select All,然后点击Trust Selected
安装完成后点击Restart Now,Eclipse将重启

31.2 设置UTF-8

Eclipse,菜单栏,窗口(W),首选项(P),常规,工作空间,文本文件编码(T),其他(O):,设置为UTF-8

31.3 自动提示

Eclipse,菜单栏,窗口(W),首选项(P),Java,编辑器,内容辅助,自动激活
Java的自动激活触发器(J),设置为.qwertyuiopasdfghjklzxcvbnm
点击应用并关闭按钮

31.4 添加JRE

Eclipse,菜单栏,窗口(W),首选项(P),Java,已安装的 JRE,
移出缺省值,就算是LibericaJDK,那也得删除
点击添加(A)…,点击下一步(N) >
点击目录(O)…

32、(放弃)Eclipse

32.0、新建项目

Eclipse,菜单栏,文件(F),新建(N)(Alt+Shift+N),Java 项目
项目名(P),输入hijavafx1
勾选Use default JRE 'LibericaJDK-17-Full' and workspace compiler preferences
直接点击完成(F)

32.1、新建包

左侧,包资源管理器,右键hijavafx1,新建(W),包
名称(M),改为pers.siqiao.hijavafx.lifecycle
点击完成(F)

32.2、新建类

右键pers.siqiao.hijavafx.lifecycle,新建(W),类
名称(M),输入Main
勾选public static void main(String[] args) 想要创建哪些方法存根(占位代码)?
点击完成(F)

32.3、main方法

main方法内,输入sysout的一部分syso,快捷键Alt+/显示模板建议
回车选择sysout - 打印到标准输出
输出这句话System.out.println("hijavafx");
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

32.4 运行

上方,工具栏,第7项,点击绿色圆底白色三角形图标运行
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
菜单栏,运行(R),运行(R)(Ctrl+F11)

下方控制台显示输出
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

32.5 代码格式化

菜单栏,源码(S),格式化(F)(Ctrl+Shift+F)

32.6 继承

public class Main

改为

public class Main extends Application

Eclipse自动添加import语句
JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse
Application居然被标红,说明Eclipse表面上import,其实根本不认识javafx.application.Application
Eclipse 真绝了,越活越回旋,你快都不如 VSCode 了你都
Application cannot be resolved to a type
The type javafx.application.Application is not accessible


JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse