如何解决“图形设备初始化失败:d3d,sw”的问题

时间:2019-04-07 17:51:08

标签: java javafx

几天前,我在JavaFX 11+上遇到了问题。在这里,您可以看到编译器抛出的错误:

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

还有等等...

这个问题很难解释。 我只是复制了“ lib”文件夹并将其粘贴到我的桌面中。我删除了其他文件夹。这样错误就解决了。

6 个答案:

答案 0 :(得分:2)

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

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

并在运行FX Application时使用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文件,则会弹出上述错误。

答案 1 :(得分:1)

对我有用的解决方案是将 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"

答案 2 :(得分:0)

现在,我将向您展示如何解决此错误。

现在,我将向您展示如何轻松解决此问题。 这将是一个很长的解释,但值得。

下载JavaFX 11+之后,解压缩文件,并在解压缩文件后切换到IntelliJ IDEA。现在,按照我将在IntelliJ IDEA中编写的步骤进行操作。

< 1. File 
< 2. Project Structure 
< 3. Global Libraries <br/>
< 4. Press the "+" sign and then Java 
< 5. Go to the JavaFX 11+ folder you have just downloaded. Go into the Folder and now go into "lib" and select all of these files in the Folder except "src.zip", and press "OK" in the bottom right corner and save it as "javafx12".<br/>
< 6. Now you move the mouse pointer under the "+" and press right click on the Librarie that you named as "javafx12", now a small window opens with different options but you press the mouse pointer on "Add to Modules" after you did that you move the mouse pointer to the "src" Folder and right-click with the mouse. Now open a wide window with various options but you choose the "New" option, now has opened a wide window with many different options but you choose again "module-info.java" and now you copy this text: 

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;

}

现在运行程序,我希望程序能够执行而不会抛出错误...

答案 3 :(得分:0)

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

答案 4 :(得分:0)

https://gluonhq.com/products/javafx/下载OpenJFX

解压缩下载的zip文件。

将所有文件从bin文件夹复制到JAVA_HOME的bin文件夹中。

C:\ Program Files \ Java \ jdk-11.0.6 \ bin

答案 5 :(得分:0)

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