【问题标题】:Getting the "Graphics Device initialization failed for : es2, sw" error on my M1 MacBook when running a JavaFX Project运行 JavaFX 项目时,在我的 M1 MacBook 上出现“图形设备初始化失败:es2,sw”错误
【发布时间】:2021-03-21 20:31:29
【问题描述】:

我正在为 Arm 使用 Zulu openJdk 11。我在 IntelliJ 和 VsCode 中都试过了,但都遇到了同样的错误。(我使用的是 JavaFx SDK 11.0.2) Error Message (screenshot from visual studio code)

非常感谢任何帮助,我已经尝试解决这个问题好几天了,但找不到任何关于 Apple Silicon 的信息。

提前致谢。

图形设备初始化失败:es2、sw 初始化 QuantumRenderer 时出错:找不到合适的管道 java.lang.RuntimeException:java.lang.RuntimeException:初始化 QuantumRenderer 时出错:找不到合适的管道 在 javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280) 在 javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222) 在 javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260) 在 javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267) 在 javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051) 原因:java.lang.RuntimeException:初始化 QuantumRenderer 时出错:找不到合适的管道 在 javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94) 在 javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) 在 java.base/java.lang.Thread.run(Thread.java:834) 线程“主”java.lang.reflect.InvocationTargetException 中的异常 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051) 原因:java.lang.RuntimeException:未找到工具包 在 javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272) 在 javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267) 在 javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363) ... 5 更多

项目代码(从oracle复制它只是为了测试mu设置):

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
 
public class JavaFX extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
 
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

【问题讨论】:

    标签: javafx runtime-error java-11 apple-m1


    【解决方案1】:

    我已经更新了系统并更改了以前的 fx jar,然后收到与您类似的警告。 (大苏尔 11.4) 这是解决方案:

    1. 访问https://gluonhq.com/products/javafx/ 并再次下载 JDK。 然后按照此说明设置路径https://openjfx.io/openjfx-docs/#install-javafx 我正在使用eclipse,对我来说,我需要将运行配置的参数更改为“-module-path=”/Users/XXX/Documents/javafx-sdk-11.0.2/lib”--add-modules javafx.controls ,javafx.fxml" 之后,应用并运行。您很可能会收到“无法打开“libprism_es2.dylib”,因为无法验证开发人员。”并且“libprism_sw.dylib”无法打开,因为无法验证开发人员。”这是一个进步,因为它们完全缺少 es2 和 sw。
    2. 然后按照这个解决方案:“libprism_sw.dylib” cannot be opened because the developer cannot be verified. on mac JAVAFX 并授予他们访问权限(我花了很多时间重复授予多个库) 终于,fx 运行了!

    【讨论】:

      【解决方案2】:

      对于 M1,您必须下载支持 Arm 架构的 JavaFX Mac OS X AArch64 SDK 版本 17 build 14(当前)。为什么还要使用过时的 11.0.2 版本?

      【讨论】:

        【解决方案3】:

        仅供参考: 我没有使用 M1,只是将系统更新为 Big Sur。但是您对 11.0.2 已过时是正确的。 对于 Big Sur,11.0.2 可能会显示乱码而不是普通字母,即使 fx 正常运行并出现“CoreText note: Client requested name ".SFNS-Regular" 之类的警告,它也会得到 Times-Roman 而不是预期字体。所有系统 UI 字体访问都应通过适当的 API,例如 CTFontCreateUIFontForLanguage() 或 +[NSFont systemFontOfSize:]。 ”。 为了解决这个问题,我将 11.0.2 更新到 16,一切顺利。

        【讨论】:

          猜你喜欢
          • 2016-09-11
          • 2017-04-03
          • 2014-02-06
          • 1970-01-01
          • 2021-04-09
          • 1970-01-01
          • 2022-09-29
          • 2020-02-21
          相关资源
          最近更新 更多