最近有小伙伴使用JFX搭建 简易版的桌面GUI程序

刚好项目基于JDK11,那么首先我们就必须准备好JFX模块

JFX简介

Oracle 近日在其官方博客宣布,从 JDK 11 开始,JavaFX 将作为独立模块从 JDK 中分离出来,以使 JavaFX 更易于被采用。该调整将降低新贡献者参与 OpenJFX 开源社区的门槛。

JavaFX 于 JavaOne 2007 大会上首次对外公布,并被迅速拿来与 Adobe Flex 和 Microsoft Silverlight 做比较。该技术于 2011 年完全开源,并在一年后成为 Oracle JDK 的一部分。

Oracle 解释称,随着 Java SE 9 模块系统的出现,是时候将 JavaFX 与 JDK 分离开来,以便让 JavaFX 可以单独下载使用。这将使使用 JavaFX 框架的开发人员获得更多的自由度和灵活性。而且,随着 JDK 开发团队的工作重点主要放在其快速版本迭代上,JavaFX 需要除 Oracle 之外,更多其他 OpenJFX 社区的贡献力量驱动。

下载方案

1、openjfx官网下载

javaFX为什么没有 frame 为什么javafx被移除_GUI

2、选择对应系统、JDK一致的版本

javaFX为什么没有 frame 为什么javafx被移除_GUI_02

3、整体结构和内容

事故现场

事故1

直接从官网下载JFX后 ,直接把 lib中的依赖利用 Build Path记载到项目中

javaFX为什么没有 frame 为什么javafx被移除_java_03


此时发现项目上有红色感叹号

Description	Resource Path	Location	Type
Archive for required library: 'lib/javafx.properties' in project 'JFXTest' 
cannot be read or is not a valid ZIP file JFXTest Build path Build Path Problem

The project cannot be built until build path errors are resolved

事故原因

不小心把javafx.properties配置文件给当成jar包加载到项目中,导致无法识别 ZIP文件

移除该文件就行 如下图

javaFX为什么没有 frame 为什么javafx被移除_自定义_04


运行代码

public class AppLauncher {
	public static void main(String[] args) {
		Application.launch(MediaDemo.class, args);
	}
}

事故现场2

异常代码

Graphics Device initialization failed for :  d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
	at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
	at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
	at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
	... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
	at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
	at java.base/java.lang.Thread.run(Thread.java:833)

图形设备初始化失败:d3d,sw
初始化QuantumRenderer时出错:找不到合适的管道

原因

怀疑无法同SWT直接 Build Path 相关jar包后生效


把JFX相关依赖打包成常用的自定义用户依赖 如同 平时加载的 **JRE System Library [jre]**一样

1、右键项目 选择 Build Path 点击 配置中心 Configure …

javaFX为什么没有 frame 为什么javafx被移除_java_05

2、基于Classpath的位置 添加 User Library

javaFX为什么没有 frame 为什么javafx被移除_JavaFX_06


3、自定义一个名字描述制作的依赖包

javaFX为什么没有 frame 为什么javafx被移除_自定义_07

4、添加想要扩展的j Jars…

找到官网下载的JFXlib目录 选中所有的文件

javaFX为什么没有 frame 为什么javafx被移除_自定义_08

5、打包完成

javaFX为什么没有 frame 为什么javafx被移除_自定义_09

6、自定义的JFX11完成

javaFX为什么没有 frame 为什么javafx被移除_javaFX为什么没有 frame_10

7、项目配置JFX11

javaFX为什么没有 frame 为什么javafx被移除_javaFX为什么没有 frame_11


javaFX为什么没有 frame 为什么javafx被移除_javaFX为什么没有 frame_12

8、测试运行效果

javaFX为什么没有 frame 为什么javafx被移除_java_13