![](/img/trans.png)
[英]How to solve "Graphics Device initialization failed for : d3d, sw" when running a java Jar file with JavaFx
[英]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 中按照以下步驟操作。
現在,您將鼠標指針移到“+”下,然后右鍵單擊您命名為“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.