質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

解決済

LibericaJDKをインストールせず、JavaFXを使ったjarファイルを起動させたい。

kuritake
kuritake

総合スコア14

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

2回答

0評価

0クリップ

621閲覧

投稿2022/01/09 08:56

編集2022/01/13 13:00

発生した問題と行いたいこと

ご覧いただきありがとうございます。
現在、ZXingとJavaFXを使用した、文字列からQRコードを生成するプログラムを作成しています。
試作してみたプログラムをEclipseで実行し、対象をjarファイルにエクスポートして実行するところまでは確認できていました。
ですが、本日稼働を行ったところ、実行ができなくなりました。
原因を探ったところ、PCからLibericaをアンインストールしたことが原因であると判明いたしました。(Libericaを入れなおしたところ、稼働しました)

本プログラムをLibericaを使用しないで実行したいのですが、どの部分において問題であるか見当がつなかかったため、こちらに投稿させていただきました。

使用環境

OS:Windows10
Eclipse:Version:2021-09 (4.21.0)
java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM (build 17.0.1+12-LTS, mixed mode, sharing)

構成とEclipseで作成したソースコード

QRcodeapp
├─src
├─├─application
├─├─├─Main.java
├─├─├─QRcreator.java
├─├─├─application.css
├─├─├─Main.fxml
├─├─ctrl
├─├─├─Controller.java
├─module-info.java

java

//Main.java package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { try { VBox root = (VBox)FXMLLoader.load(getClass().getResource("Main.fxml")); Scene scene = new Scene(root,600,450); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.setTitle("QRコードに変換"); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } }

java

//QRcreator.java package application; import java.awt.image.BufferedImage; import java.util.Hashtable; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; //BufferedImageの画像データをjavaFXのImageに変換する import javafx.embed.swing.SwingFXUtils; import javafx.fxml.FXML; import javafx.scene.image.Image; public class QRcreator { @FXML private Image FXimage; public Image rtnQrImg(String txtFld){ try { String contents = txtFld; BarcodeFormat format = BarcodeFormat.QR_CODE; int width = 160; int height = 160; Hashtable hints = new Hashtable(); //日本語を扱うためにシフトJISを指定 hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); QRCodeWriter writer = new QRCodeWriter(); BitMatrix bitMatrix = writer.encode(contents, format, width, height, hints); BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix); FXimage = SwingFXUtils.toFXImage(image, null); } catch (WriterException e) { e.printStackTrace(); } return FXimage; } }

java

//Controller.java package ctrl; import java.net.URL; import java.util.ResourceBundle; import application.QRcreator; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; /* module-infoに「opens ctrl to javafx.fxml;」を追加することで、 * このファイルがjavafxを利用できるようになる*/ public class Controller implements Initializable { public QRcreator qr; private String txtFld; /** テキストフィールド */ @FXML private TextField textBox; /** ボタン */ @FXML private Button button; @FXML private ImageView qrimage; @FXML private Image rtnQrImage; @Override public void initialize(URL location, ResourceBundle resources) { // 処理なし } @FXML public void onClick(ActionEvent event) { // テキストボックスに文字列をセットする txtFld = textBox.getText(); qr = new application.QRcreator(); rtnQrImage = qr.rtnQrImg(txtFld); qrimage.setImage(rtnQrImage); } }

Java

//module-info.java module QRcodeapp { exports application; exports ctrl; requires javafx.base; requires javafx.controls; requires javafx.fxml; requires javafx.graphics; requires java.desktop; requires com.google.zxing; requires com.google.zxing.javase; requires javafx.swing; opens ctrl to javafx.fxml; }

jarファイルの構成

jarファイルは起動構成を「Main.java」の「Main」に設定し、「QRapp.jar」という名称でエクスポートしました。
jarファイルは以下の構成で実行しています。

jartest
├─lib
├─├─core-3.4.0.jar
├─├─javafx.base.jar
├─├─javafx.controls.jar
├─├─javafx.fxml.jar
├─├─javafx.graphics.jar
├─├─javafx.media.jar
├─├─javafx.swing.jar
├─├─javafx.web.jar
├─├─javafx-swt.jar
├─├─javase-3.4.0.jar
├─├─org.eclipse.fx.ide.css.jfx8_3.7.0.202010120832.jar
├─actjar.bat
├─QRapp.jar

actjar.batでは、VM引数を設定してjarファイルを実行しています。

bat

@echo off @set hensu=%~dp0 @set JAVA_FX=%hensu%lib java --module-path %JAVA_FX% --add-modules=javafx.controls,javafx.fxml -jar Qrapp.jar

実行すると、以下のようになります。
実行結果

Liberica及びエラー画面について

Libericaはここから持って来てインストールしました。
「Liberica Full JDK 17.0.1+12 x86 64 bit for Windows」をMSIで落としています。

Libericaをアンインストールし、再びjarファイルを実行すると、以下のようなエラーが表示されます。

error

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 javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:283) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:254) at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:264) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:95) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.base/java.lang.Thread.run(Thread.java:833) 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:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) Caused by: java.lang.RuntimeException: No toolkit found at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) ... 5 more

こちらのエラーはEclipse上では発生せず、エクスポートしたjarファイルの実行時に発生しています。
エラー内容からして、Libericaに同梱されていたjavaFXに対して別途処理が必要な気がするのですが、様々な方法を実行した結果、エラー解決に至らず、こちらに投稿させていただきました。

長文の投稿やお見苦しい点が多いかと思いますが、何卒ご支援の程をいただければ幸いです。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。