簡體   English   中英

如何解決“圖形設備初始化失敗:d3d,sw”問題

[英]How to solve the "Graphics Device initialization failed for : d3d, sw" Problem

我在啟動使用 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

使用以下鏈接下載 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 文件,則會彈出上述錯誤。

對我java.library.path的解決方案是將 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"

您不必在模塊信息中包含所有內容,只需包含您使用的部分。 最低限度似乎是基礎、控件和圖形。 (我的代碼使用這些和 fxml。)例如,如果您不使用 Swing 或 media,則可以省略 javafx.swing 和 javafx.media。 未找到的渲染工具包位於特定於 Windows 的二進制文件中。 它位於 javafx-sdk/bin 目錄中。 該目錄必須是 java.library.path 的一部分。 如果您使用模塊,javafx-sdk/lib 可能是模塊路徑的一部分。 (當然,特定版本是 javafx-sdk 目錄名稱的一部分。)

下載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; }

這解決了問題。

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

解壓縮下載的 zip 文件。

將bin文件夾中的所有文件復制到JAVA_HOME的bin文件夾中。

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

我強烈建議使用 maven 來創建 JavaFX 程序。 該方法在 JavaFX 的 Intellij 研討會中進行了說明。 鏈接然而; 這個問題有一個簡單的解決方案。 您必須提取 JavaFX SDK 的所有內容; 然后在不刪除或更改其他子文件夾的情況下添加庫。 如果你只是復制 lib 子文件夾,它不會解決 bin 子文件夾中的文件夾

我遇到了同樣的問題。 原來我下載的是 aarch64 版本而不是 x64。 https://gluonhq.com/products/javafx/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM