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

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

関連記事

Javaの動的Webプロジェクト作成での事前設定と雛形Webプロジェクト作成

「動的Webプロジェクト」とはHTMLのような静的ページのみならず、ServletやJSPを用いてWebアプリケーション開発をする際に作成します。本記事ではEclipseにて「動的Webプロジェクト」 …

JavaのDequeの概要や使い方+サンプルプログラムもご紹介

<目次> (1) JavaのDequeの概要や使い方+サンプルプログラムもご紹介  (1-1) Dequeとは?  (1-2) Dequeを実装したクラス  (1-3) Dequeの使い方  (1-4 …

Javaで正規表現を使ってURLを文字列から検出する方法

<目次> (1) Javaで正規表現を使ってURLを文字列から検出する方法  (1-1) 構文  (1-2) 構文の説明  (1-3) サンプルプログラム  (1-4) ツールのご紹介 (1) Jav …

JFreeChartで描画したグラフをJSP/Servlet画面に表示する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) 表示方法の概要  (2-1) 表示の仕組み  (2-2) 実装の手順 (3) サンプルプログラム  (3-1) JSPのサンプルプログ …

Javaのメソッドで複数の戻り値を返却する方法

<目次> (1) Javaのメソッドで複数の戻り値を返却する方法  (1-1) 同じ型の値を複数返却したい場合 ⇒ 配列やList   ◎ポイント   ◎サンプル  (1-2) 異なる型の関連する値を …

  • English (United States)
  • 日本語
Top