Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)

投稿日:2022年4月30日 更新日:

 

<目次>

(1) 「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)
 (1-1) エラーメッセージ・発生状況
 (1-2) 原因
 (1-3) 対策
 (1-4) 参考:JFXについて

(1) 「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)

(1-1) エラーメッセージ・発生状況

jarファイルを「java -jar XXX.jar」コマンドで実行しようとした際に下記のエラーが出ました(Windows、Linux両方で同じエラー内容)。
 
(エラーメッセージ)
Graphics Device initialization failed for :  es2, 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:261)
	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:832)
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.RuntimeException: No toolkit found
	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:273)
	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:832)

(図111)Linuxの例。

(図111②)

(1-2) 原因

jarファイルの実行に必要なJava FX系のライブラリが不足していたために発生している可能性があります。
 
まずは原因を正しく突き止めるために、jarを実行する際のコマンドに「デバッグコマンド」である「-Dprism.verbose=true」を付与して詳細なログ(起動時の設定値など)を出力してみる事が第一ステップです。
 
(コマンド例)
java -Dprism.verbose=true -jar XXX.jar
(図121①~②)より詳細なログが出力された

 
詳細なログを確認すると、例えば次のような手掛かりが見つかります。
 
(エラーメッセージ抜粋)
*** Fallback to Prism SW pipeline
Prism pipeline name = com.sun.prism.sw.SWPipeline
GraphicsPipeline.createPipeline failed for com.sun.prism.sw.SWPipeline
java.lang.UnsatisfiedLinkError: no prism_sw in java.library.path: C:\Program Files\Java\jdk-17.0.1\bin;~(中略:環境変数PATHの値)~.
 
この部分ではPATHの環境変数に指定されたパス(例:C:\Program Files\Java\jdk-17.0.1\binJAVA_HOME\binなど)に、必要なライブラリ(prism_swなど)が無いことが書かれています。
 
(図121③)

(1-3) 対策

上記原因の場合、対策は「Java FXのライブラリを適当な場所に配備し、そのパスを環境変数「PATH」に追加する」という対応になります。

●STEP1:Java FXのダウンロード

こちらのサイト(https://gluonhq.com/products/javafx/)から、Java FXをダウンロードしていきます。
 
・①Java FXのサイトで、ご自身のOSに合うType=SDKのものをダウンロード
 
(図131②)

●STEP2:Java FXの配備

・①ダウンロードしたzipを解凍します。
(図132①)

・②適当な場所に上記「lib」フォルダの中身を追加します。
※私の場合「C:\Program Files\Java\jdk-17.0.1\」配下に「jfx\lib」というフォルダを作り、その中に格納
(図132②)

・③適当な場所に上記「bin」フォルダの中身を追加します。
※私の場合「C:\Program Files\Java\jdk-17.0.1\」配下に「jfx\bin」というフォルダを作り、その中に格納
(図133①)


・④環境変数の追加(PATH_TO_FX)をします。
・システム環境変数で「新規」を押下
(図133②)

・下記のように登録します。
変数:PATH_TO_FX
値:[※ご自身でPATH環境変数にJava FXのライブラリ(lib)を格納したパス]
 
※私の場合は「C:\Program Files\Java\jdk-17.0.1\jfx\lib」
(図133③)

・⑤環境変数の修正(PATH)をします。
PATH環境変数にJava FXのライブラリ(lib)を格納したパスを追加します。
※私の場合は「C:\Program Files\Java\jdk-17.0.1\jfx\lib」

(図134①)

●STEP3:疎通確認

ここまで出来たら、再度エラーになったコマンドを実行してみます。

私の場合、当該エラーは出なくなりました(別のエラーが出ていますが💦)
(図141①)

目次にもどる

(1-4) 参考:JFXについて

JavaFXはリッチなクライアントアプリ(端末側で動作するアプリ)を開発するためのJavaのパッケージ群です。Java [nopc]FXは基本的にJava Applet技術の上に作られているため、Java FXの改良ポイントはAppletの中にも取り込みが可能とされています(正確にはJava FX部品をSwing部品に埋め込み、それを更にJava Appletに埋め込み?)。
 
※Java Appletは「java.applet.Applet」のサブクラスで、アプレットとWebブラウザとの間のインターフェイスを提供します。
※SwingはAppletクラスの特殊なサブクラスで「javax.swing.JApplet」と呼ばれている。Swing部品を使ったGUIはこの「JApplet」クラスを使用します。
 

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JSP/Servletでログイン・ログアウト機能を作成する方法

<目次> (1) JSP/Servletでログイン・ログアウト機能を作成する方法  (1-1) ログイン   (1-1-1) 概要・構文   (1-1-2) サンプルプログラム  (1-2) ログアウ …

Javaのsynchronizedとは?ある場合とない場合のサンプルPGを比較付き

<目次> (1) Javaのsynchronizedとは?ある場合とない場合のサンプルPGを比較付き  (1-1) synchronizedの概要  (1-2) synchronizedの構文  (1 …

JSP/Servletでcsvをダウンロードする機能を作成する手順

<目次> (1) JSP/Servletでcsvをダウンロードする機能を作成する手順  (1-0) 実現方針  (1-1) STEP1:Servletの追記  (1-2) STEP2:JSPの追記   …

JavaのArrrayListとLinkedListの違いについて

<目次> (1) JavaのArrrayListとLinkedListの違いについて  (1-1) 比較表(ArrayList vs LinkedList)  (1-2) まとめ  (1-3) 参考 …

EclipseでJavaプロジェクトを同一サーバ内で別名コピーする方法

(0)目次&概説 (1) プロジェクトの別名コピーの手順  (1-1) プロジェクトのコピー&ペースト  (1-2) コピーしたプロジェクトをTomcatへ登録  (1-3) Tomcatサーバの再起 …

  • English (United States)
  • 日本語
Top