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

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

関連記事

JDBCドライバとは?概要や使い方をご紹介

<目次> (1) JDBCドライバとは?概要や使い方をご紹介  (1-1) JDBC及びJDBCドライバとは?   (1-1) JDBC API   (1-2) JDBCドライバマネージャー   (1 …

JavaのSpring Bootで404(Not_Found)エラーが出た時の対処方法について

  <目次> (1) JavaのSpring Bootで404(Not_Found)エラーが出た時の対処方法について  (1-1) エラー概要  (1-2) 原因  (1-3) 対処法 (1 …

Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録

<目次> (1) Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録  (1-1) 発生事象・エラーメッセージ  (1-2) 原因  (1-3) 対策 (1) Javaのフォー …

Javaのスレッドとは?概念やサンプルプログラムのご紹介

  <目次> (1) Javaのスレッドとは?概念やサンプルプログラムのご紹介  (1-1) Javaのスレッドとは?  (1-2) 方法①:Threadクラス継承の構文  (1-3) 方法 …

Javaのthisとは?コンストラクタで引数を与えている場合・メソッド引数に使われる場合もご紹介

<目次> (1) Javaのthisとは?コンストラクタに出現する場合やメソッド引数に使われる場合もご紹介  (1-1) thisとは?  (1-2) 用途1:自分自身を指定【重要】  (1-3) 用 …

  • English (United States)
  • 日本語
Top