簡體   English   中英

使用 JavaFx 運行 Java Jar 文件時如何解決“圖形設備初始化失敗:d3d,sw”

[英]How to solve "Graphics Device initialization failed for : d3d, sw" when running a java Jar file with JavaFx

大家下午好。

當我嘗試將 Java 代碼作為 Runnable Jar 文件運行時遇到問題。 我正在使用 Eclipse 並創建了一個普通的 Java 項目。 我將 JavaFX jar 作為用戶庫包含在內。 當我用 IDE 啟動它時,程序運行沒有問題。 為了創建 Jar 文件,我使用了 Runnable Jar 文件中 Java 項目導出中的構建。 當我選中“將所需的庫提取到生成的 JAR 中”並運行它時,我收到此錯誤消息:

Error: JavaFX runtime components are missing, and are required to run this application

當我檢查“將所需的庫打包到生成的 JAR 中”並運行它時,我收到此錯誤消息:

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 com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        ... 1 more
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 org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
Caused by: java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:835)

有誰知道,為什么我不能運行 JAR 但在 IDE 中它可以正常運行?

我按照此處的文檔安裝了 JavaFX https://openjfx.io/openjfx-docs/

我找到了解決我的問題的方法。 當我將庫導出到生成的 Jar 中時,我收到了 JavaFX 運行時組件丟失的錯誤。 我現在記得我之前在 Eclipse 中遇到了相同的錯誤,盡管代碼中沒有錯誤並且我使用了 JavaFX 元素。 但是要啟動並運行它,我必須添加 VM 參數。 所以當我想運行程序時,我只需要在命令提示符中寫這個。

假設您已經在構建 Jar 文件的目錄中:

java --module-path "C:\Path\to\javafx-sdk-13.0.2\lib" --add-modules javafx.controls,javafx.fxml -jar YourJar.jar

它現在對我有用。 希望它也能幫助其他人。

最好的祝願

檢查您構建的 jar 文件清單文件以查看其依賴項。 將有一個名為 Class-path 的變量:您可以通過右鍵單擊 jar 文件並使用 winrar 或普通資源管理器 META.INF 打開來執行此操作。如果它們都以 libs/ 開頭,則創建一個 libs 文件夾,您構建的 jar 文件所在的位置並將所有 javafx 指定的 jar 文件復制到該文件夾​​中,然后執行

暫無
暫無

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

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