【问题标题】:How to solve the "Graphics Device initialization failed for : d3d, sw" Problem如何解决“图形设备初始化失败:d3d,sw”问题
【发布时间】:2025-12-31 20:15:01
【问题描述】:

我在启动使用 JavaFX 11+ 的应用程序时遇到了以下RuntimeException

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:243)
    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:567)
    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:835)
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:567)
    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

【问题讨论】:

  • 很高兴您找到了解决方案 :) 您可能会考虑将其作为答案(针对您自己的问题)发布 - 这样做可以让其他人更容易识别它

标签: java javafx


【解决方案1】:

使用下面的链接下载 JavaFX Windows SDK

https://gluonhq.com/products/javafx/

并在运行 FX 应用程序时在 VM 参数中使用以下选项

-p $ModuleFileDir$/lib/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.base,javafx.fxml,javafx.graphics,javafx.media,javafx.web --add-opens=javafx.graphics/javafx.scene=ALL-UNNAMED --add-exports javafx.base/com.sun.javafx.event=ALL-UNNAMED

注意:不要更改下载文件夹中的任何内容:按原样使用。 DLL 文件很重要;如果缺少 DLL 文件,则会弹出上述错误。

【讨论】:

  • 您的笔记是关键。不过,除了--add-modules,我没有使用任何其他东西。没有打开或导出。
【解决方案2】:

我遇到了同样的问题。原来我下载的是 aarch64 版本而不是 x64。 https://gluonhq.com/products/javafx/

【讨论】:

  • 我遇到了同样的问题,我错误地为我的 Windows 10 下载了 x86 存档而不是 x64。所以现在,它可以正常工作了
【解决方案3】:

下载JavaFX 11+后,解压文件,解压后切换到IntelliJ IDEA。然后在 IntelliJ IDEA 中按照以下步骤操作。

  1. 文件
  2. 项目结构
  3. 全球图书馆
  4. 按“+”号,然后按 Java
  5. 转到您刚刚下载的 JavaFX 11+ 文件夹。进入文件夹,现在进入“lib”并选择文件夹中除“src.zip”之外的所有这些文件,然后按右下角的“确定”并将其保存为“javafx12”。
  6. 现在您将鼠标指针移到“+”下方,然后右键单击您命名为“javafx12”的库,现在会打开一个带有不同选项的小窗口,但您在“添加到模块”之后按下鼠标指针你做了你将鼠标指针移动到“src”文件夹并用鼠标右键单击。现在打开一个带有各种选项的宽窗口,但您选择了“新建”选项,现在打开了一个带有许多不同选项的宽窗口,但您再次选择了“module-info.java”,现在您复制以下文本:

    module YOUR-PROJECT-NAME {
    
        requires javafx.graphics;
        requires javafx.controls;
        requires javafx.media;
        requires javafx.base;
        requires javafx.web;
        requires javafx.swing;
        requires javafx.fxml;
    
        opens application;
    }
    

这解决了问题。

【讨论】:

    【解决方案4】:

    对我有用的解决方案是将JavaFX SDK 的\bin 目录添加到java.library.path。这与将文件从 bin 文件夹复制到 JAVA_HOME 的路径具有相同的效果,但它会保持项目特定的更改。

    File -> Project Properties -> Run

    -Djava.library.path="C:\path\to\javafx-sdk-11.0.2\bin"
    

    【讨论】:

      【解决方案5】:

      您不必在模块信息中包含所有内容,只需包含您使用的部分即可。最低限度似乎是基础、控件和图形。 (我的代码使用这些和 fxml。)例如,如果您不使用 swing 或 media,则 javafx.swing 和 javafx.media 可能会被省略。未找到的渲染工具包位于特定于 Windows 的二进制文件中。它位于 javafx-sdk/bin 目录中。该目录必须是 java.library.path 的一部分。如果您使用模块,javafx-sdk/lib 可能是模块路径的一部分。 (当然,特定版本是 javafx-sdk 目录名称的一部分。)

      【讨论】:

        【解决方案6】:

        我强烈推荐使用 maven 来创建 JavaFX 程序。该方法在有关 JavaFX 的 Intellij 研讨会中进行了说明。 link 然而;这个问题有一个简单的解决方案。您必须提取 JavaFX SDK 的所有内容;然后添加库而不删除或更改其他子文件夹。如果你只是复制 lib 子文件夹,它不会寻址 bin 子文件夹中的文件夹

        【讨论】:

          最近更新 更多