使用 JavaFX 11 的自定义 JRE

2023-12-13

我正在使用 JDK 11 和 JavaFX 11。

我使用 Jlink 为示例 FX 模块程序创建了一个自定义 JRE,但是当我尝试使用自定义 JRE 运行时,它会呈现如下错误:

这就是我创建自定义 JRE 的方式(没有错误):

jlink --module-path ..\jmods;%PATH_TO_FX% --add-modules java.base,java.desktop,jdk.unsupported,javafx.graphics --output FXJRE

这就是我尝试运行的方式(有错误):

FXJRE\bin\java --module-path %PATH_TO_FX%;mods -m com.javafxdemo/com.javafxdemo.JavaFXDemo

错误信息:

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 javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
        at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        at java.base/java.lang.Thread.run(Thread.java:834)
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: No toolkit found
        at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
        ... 5 more

以下是我的编译方法:

源码JavaFXDe​​mo.java:

package com.javafxdemo;

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;

public class JavaFXDemo extends Application {
    @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();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

module-info.java:

module com.javafxdemo {
    requires javafx.base;
    requires javafx.graphics;
    requires javafx.controls;
    
    exports com.javafxdemo;
}

我就是这样编译的。

javac -d mods\com.javafxdemo --module-path %PATH_TO_FX% src\com.javafxdemo\module-info.java src\com.javafxdemo\com\javafxdemo\JavaFXDemo.java

编译后,我有模块类文件如下:

├───mods
│   └───com.javafxdemo
│       │   module-info.class
│       │
│       └───com
│           └───javafxdemo
│                   JavaFXDemo.class
│
└───src
    └───com.javafxdemo
        │   module-info.java
        │
        └───com
            └───javafxdemo
                    JavaFXDemo.java

我可以成功运行如下:

java --module-path %PATH_TO_FX%;mods -m com.javafxdemo/com.javafxdemo.JavaFXDemo

不过我可以使用默认的 JDK11 运行。

如何成功创建自定义 JRE 并使用它运行示例 FX 模块程序?


如果你去这个link,您会注意到每个平台的 JavaFX 发行版有两种风格:

jmods

JavaFXSDK是您正在使用的:

export PATH_TO_FX=/path/to/javafx-sdk-11/lib

如果你检查下面的文件lib,这些是罐子。

JavaFXjmods另一面包含jmod 格式。

如果您读到jmod format here:

对于大多数开发任务,包括在模块路径上部署模块或将它们发布到 Maven 存储库,请继续将模块打包在模块化 JAR 文件中。这jmod该工具适用于具有本机库或其他配置文件的模块,或者您打算使用 jlink 工具链接到运行时映像的模块。

换句话说,如果你使用javac or java要运行您的 jar 或模块,您可以使用 SDK,但如果您使用jlink要创建自定义 JRE,您需要jmod版本。

下载 jmod 后,解压它们并创建此变量:

export PATH_TO_FX_JMOD=/path/to/javafx-jmods-11/

现在您可以创建 JRE:

jlink --module-path %PATH_TO_FX_JMOD%;mods --add-modules=com.javafxdemo --output FXJRE

and run:

FXJRE/bin/java -m com.javafxdemo/com.javafxdemo.JavaFXDemo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JavaFX 11 的自定义 JRE 的相关文章

随机推荐

  • Glassfish 部署错误“无法识别 MyProject.jar 的存档类型”

    我创建了一个动态 Web 应用程序 我想用 glassfish 部署它 我已成功将源代码构建到 MyProject jar 但是当我部署它时 显示以下错误 远程故障 无法识别 home davenlin MyProject build My
  • 通过Spring MVC上传二进制文件到MySQL的正确方法

    我正在尝试将文件上传到 MySQL 但是我无法正确执行此操作 我正在使用云平台将 Java Spring 应用程序作为网站运行 控制器 byte bytes file getBytes file is MultipartFile DFile
  • 将变量传递到示例部分[重复]

    这个问题在这里已经有答案了 我设置了两个变量 假设在一个功能中 cityA New York 和 cityB Las Vegas 并将它们 导出 def表达 现在我想在另一个功能中使用这些变量 Scenario Outline Succes
  • Oracle sql查询按日期对连续记录进行分组

    使用下面的示例数据 我尝试以相同的速率对记录进行分组 id start date end date rate 1 01 01 2017 12 00 00 am 01 01 2017 12 00 00 am 300 1 02 01 2017
  • 为bazel、android tensorflow设置targetSdkVersion和compileSdkVersion

    我需要帮助如何为 bazel 设置目标和单独编译 Sdk 版本 我想在手机上运行tensorflowthis教程 编辑 bazel 的 WORKSPACE 后如下 android sdk repository name androidsdk
  • 加快 PLY 文件读取速度

    目前 我在 MATLAB 中使用以下代码段将 PLY 读入 MATLAB 矩阵 这是一个示例 PLY 文件 但当PLY文件很大时 需要相当长的时间 有没有更好的方法在 MATLAB 中高效读取文本文件 data textread fileN
  • Spring:标准日志方面(拦截器)

    我发现了很多关于如何使用 Spring 框架创建自定义方面进行日志记录的示例 例如this or this但没有找到这种情况和问题的标准 通用 Spring 实现 Spring 是否有日志记录方面的标准实现 是的 有
  • 如何在 Ubuntu 11.10 上编译 OpenJDK 7 调试版本

    我在哪里可以找到一组简单的指令来编译OpenJDKUbuntu 11 10 Oneiric 上的 7 调试版本 调试版本将使更多 JVM 选项可用于故障排除 例如 WizardMode The 开发者指南 and 构建自述文件有很多噪音并且
  • Python 类型错误问题

    我正在编写一个简单的程序来帮助为我所属的游戏生成订单 它属于我实际上不需要的程序类别 但现在我已经开始了 我希望它能发挥作用 一切都运行得很顺利 但我不知道如何阻止大约一半时发生的类型错误 这是代码 status 1 print b u m
  • 将每行的最后一个非零元素设置为零 - NumPy

    我有一个数组A A array 1 2 3 4 5 6 7 0 8 9 0 0 我想将每行的最后一个非零更改为 0 A array 1 2 3 0 5 6 0 0 8 0 0 0 如何为任何 n m numpy 数组编写代码 谢谢 S 方法
  • 使用 Java 配置在 Spring 中重定向 404 错误

    如您所知 在 XML 中 配置方法是
  • Java 对象的“相同性”是如何定义的?

    我想将自定义类型的对象添加到集合中 我有几个相同的 即它们的公共变量具有相同的值 我不希望将 同一 对象的多个实例添加到集合中 但每次创建新对象时 总是会添加它 这是因为 Object 类的 equals 方法在对象上实现了最具辨别力的可能
  • 禁用线性布局内的所有编辑文本

    我正在尝试禁用线性布局内的所有字段 该线性布局中有许多 edittext 和 textview 但是 我只是想禁用 edittext 我能够禁用所有孩子 但我希望能够禁用编辑文本 有什么办法可以做到这一点吗 Where ll是你的线性布局
  • 编写自定义函数时将列名称传递给 dplyr::coalesce()

    我正在尝试编写一个将包装的函数dplyr coalesce 并将接受数据对象和列名称来合并 到目前为止 我的尝试都失败了 示例数据 library dplyr df lt data frame col a c bob NA bob NA b
  • AppSync S3对象检索

    我的文件目前正在根据提供的教程上传到 s3 存储桶 我有一个 Post 类型 其文件字段指向 S3Object S3Object 具有bucket key 和region 的值 我想允许我的用户下载他们上传的文件 但我无法通过查询访问 发布
  • 覆盖 SaveChanges 并设置 ModifiedDate,但如何设置 ModifiedBy?

    我有一个 ASP NET MVC3 Web 应用程序 包含 UI 业务 实体 和数据 DbContext 层 我正在使用 Entity Framework 4 1 Code First 现在 我正在推翻DbContext SaveChang
  • 是否有人有批处理文件来应用并在 Clearcase 中创建标签或基线

    这里我需要一个批处理文件 它可以应用并创建标签或基线到透明案例项目中的版本化元素 如果有人有这个 请提供给我 如果要创建 UCM 基线 则无需先创建标签 只需进入您的视图并设置基线 cd m myView myVob myRootCompo
  • 使用 android MediaPlayer 进行无缝播放

    我试图连续重复播放音频 没有任何间隙 我试过了 mediaplayer setLooping true 但它给出了重复时间之间的差距 并尝试了这个 mediaplayer setOnCompletionListener new MediaP
  • @keyframes 不支持阿拉伯语

    我尝试用 keyframes 用阿拉伯语写一个句子 但 keyframes 不支持阿拉伯语 并且出现难以理解的字符 caption background color black caption h1 after animation move
  • 使用 JavaFX 11 的自定义 JRE

    我正在使用 JDK 11 和 JavaFX 11 我使用 Jlink 为示例 FX 模块程序创建了一个自定义 JRE 但是当我尝试使用自定义 JRE 运行时 它会呈现如下错误 这就是我创建自定义 JRE 的方式 没有错误 jlink mod