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

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

関連記事

木構造の探索における計算量の違いや木構造の種類について(B木/二分木/2-3探索木)

<目次> (1) 木構造の探索における計算量の違いや木構造の種類について(B木/二分木/2-3探索木)  (1-1) 木構造について  (1-2) 「B木」構造  (1-3) 「二分木」構造  (1- …

JavaでJSON形式のデータから値を抽出する方法+代表的なエラー対処も紹介

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) JSON形式の概要  (2-1) JSON形式とは?  (2-2) JSON形式のフォーマット (3) JSON形式の抽出方法・事前準 …

Linuxでアプリケーションサーバを構築する手順の例

<目次> (1) Linuxでアプリケーションサーバを構築する手順の例  (1-1) APサーバの全体像  (1-2) APサーバの構築手順  (1-3) 各手順のURL (1) Linuxでアプリケ …

JSPでcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューティング記録

<目次> (1) JSPでcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューテ …

Servlet(サーブレット)におけるフォワード(forward)とリダイレクト(redirect)の違い

<目次> (1) Servlet(サーブレット)におけるフォワード(forward)とリダイレクト(redirect)の違い  (1-1) フォワード(forward)とは?  (1-2) リダイレク …

  • English (United States)
  • 日本語
Top