首页 > 解决方案 > 运行 JavaFX 项目时,在我的 M1 MacBook 上出现“图形设备初始化失败:es2,sw”错误

问题描述

我正在为 Arm 使用 Zulu openJdk 11。我在 IntelliJ 和 VsCode 中都试过了,但得到了完全相同的错误。(我使用的是 JavaFx SDK 11.0.2) 错误消息(来自 Visual Studio 代码的屏幕截图)

我真的很感激任何帮助,我几天来一直在尝试解决这个问题,但找不到任何关于特别是 Apple Silicon 的信息。

提前致谢。

图形设备初始化失败:es2,sw 初始化 QuantumRenderer 时出错:找不到合适的管道 java.lang.RuntimeException:java.lang.RuntimeException:初始化 QuantumRenderer 时出错:在 javafx.graphics/com.sun.javafx.tk 中找不到合适的管道。在 javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222) 在 javafx.graphics/com.sun.javafx.tk 的quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)。 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) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang 的 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)。 reflect.Method.invoke(Method.java:566) at 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。java.base/java.lang.Thread.run(Thread.java:834) 处的 QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) java.base/jdk 处的线程“main”java.lang.reflect.InvocationTargetException 中的异常.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) 原因:java .lang.RuntimeException:在 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();
    }
}

标签: javafxruntime-errorjava-11apple-m1

解决方案


我已经更新了系统并更改了以前的 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”无法打开,因为无法验证开发者。在 mac JAVAFX 上 并授予他们访问权限(我花了很多时间重复授予多个库)最后,fx 正在运行!

推荐阅读