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

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

新規登録して質問してみよう
ただいま回答率
85.53%
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で実装されています。

Q&A

解決済

2回答

2918閲覧

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

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で実装されています。

0グッド

0クリップ

投稿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

1//Main.java 2package application; 3 4 5import javafx.application.Application; 6import javafx.fxml.FXMLLoader; 7import javafx.scene.Scene; 8import javafx.scene.layout.VBox; 9import javafx.stage.Stage; 10 11public class Main extends Application { 12 @Override 13 public void start(Stage primaryStage) { 14 try { 15 VBox root = (VBox)FXMLLoader.load(getClass().getResource("Main.fxml")); 16 Scene scene = new Scene(root,600,450); 17 scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 18 primaryStage.setScene(scene); 19 primaryStage.setTitle("QRコードに変換"); 20 primaryStage.show(); 21 } catch(Exception e) { 22 e.printStackTrace(); 23 } 24 } 25 26 27 public static void main(String[] args) { 28 launch(args); 29 } 30} 31

java

1//QRcreator.java 2package application; 3 4import java.awt.image.BufferedImage; 5import java.util.Hashtable; 6 7import com.google.zxing.BarcodeFormat; 8import com.google.zxing.EncodeHintType; 9import com.google.zxing.WriterException; 10import com.google.zxing.client.j2se.MatrixToImageWriter; 11import com.google.zxing.common.BitMatrix; 12import com.google.zxing.qrcode.QRCodeWriter; 13import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; 14 15//BufferedImageの画像データをjavaFXのImageに変換する 16import javafx.embed.swing.SwingFXUtils; 17import javafx.fxml.FXML; 18import javafx.scene.image.Image; 19 20public class QRcreator { 21 22 @FXML 23 private Image FXimage; 24 25 26 27 public Image rtnQrImg(String txtFld){ 28 try { 29 String contents = txtFld; 30 BarcodeFormat format = BarcodeFormat.QR_CODE; 31 int width = 160; 32 int height = 160; 33 34 Hashtable hints = new Hashtable(); 35 //日本語を扱うためにシフトJISを指定 36 hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS"); 37 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); 38 39 QRCodeWriter writer = new QRCodeWriter(); 40 BitMatrix bitMatrix = writer.encode(contents, format, width, height, hints); 41 BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix); 42 FXimage = SwingFXUtils.toFXImage(image, null); 43 44 } 45 46 catch (WriterException e) { 47 e.printStackTrace(); 48 } 49 return FXimage; 50 } 51 }

java

1//Controller.java 2package ctrl; 3 4import java.net.URL; 5import java.util.ResourceBundle; 6 7import application.QRcreator; 8import javafx.event.ActionEvent; 9import javafx.fxml.FXML; 10import javafx.fxml.Initializable; 11import javafx.scene.control.Button; 12import javafx.scene.control.TextField; 13import javafx.scene.image.Image; 14import javafx.scene.image.ImageView; 15 16/* module-infoに「opens ctrl to javafx.fxml;」を追加することで、 17 * このファイルがjavafxを利用できるようになる*/ 18 19public class Controller implements Initializable { 20 21 public QRcreator qr; 22 private String txtFld; 23 24 /** テキストフィールド */ 25 @FXML 26 private TextField textBox; 27 28 /** ボタン */ 29 @FXML 30 private Button button; 31 32 @FXML 33 private ImageView qrimage; 34 35 @FXML 36 private Image rtnQrImage; 37 38 39 @Override 40 public void initialize(URL location, ResourceBundle resources) { 41 // 処理なし 42 } 43 44 @FXML 45 public void onClick(ActionEvent event) { 46 // テキストボックスに文字列をセットする 47 txtFld = textBox.getText(); 48 qr = new application.QRcreator(); 49 rtnQrImage = qr.rtnQrImg(txtFld); 50 qrimage.setImage(rtnQrImage); 51 } 52 53}

Java

1//module-info.java 2module QRcodeapp { 3 exports application; 4 exports ctrl; 5 6 requires javafx.base; 7 requires javafx.controls; 8 requires javafx.fxml; 9 requires javafx.graphics; 10 requires java.desktop; 11 requires com.google.zxing; 12 requires com.google.zxing.javase; 13 requires javafx.swing; 14 15 opens ctrl to javafx.fxml; 16}

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

1@echo off 2@set hensu=%~dp0 3@set JAVA_FX=%hensu%lib 4java --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

1Graphics Device initialization failed for : d3d, sw 2Error initializing QuantumRenderer: no suitable pipeline found 3java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found 4 at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:283) 5 at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:254) 6 at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:264) 7 at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291) 8 at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) 9 at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) 10 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410) 11 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) 12 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 13 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) 14 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 15 at java.base/java.lang.reflect.Method.invoke(Method.java:568) 16 at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) 17Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found 18 at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:95) 19 at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) 20 at java.base/java.lang.Thread.run(Thread.java:833) 21Exception in thread "main" java.lang.reflect.InvocationTargetException 22 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 23 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) 24 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 25 at java.base/java.lang.reflect.Method.invoke(Method.java:568) 26 at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) 27Caused by: java.lang.RuntimeException: No toolkit found 28 at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276) 29 at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291) 30 at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) 31 at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) 32 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410) 33 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) 34 ... 5 more 35

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

本プログラムをLibericaを使用しないで実行したいのですが
...
java ... -jar Qrapp.jar

Executable jar fileを作成して配布しても、Executable jar fileを実行するには、Java環境(JRE or JDK)が必要。Executable jar fileがあるだけでは、それを実行することはできない。

Javaで書いたプログラムをexe形式とする方法は存在するらしい。が、たとえexe形式に変換できたとしても、QRappが動くかどうかはわからない。

投稿2022/01/10 01:39

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuritake

2022/01/10 06:24

別個にjreの環境を作成して無事稼働しました。 回答ありがとうございます。
guest

0

自己解決

すみません、自己解決しました。

本プログラムをLibericaを使用しないで実行したい

という方法の実現ついて、このQRapp用のJREを作成することで解決できました。
openjdkにopenJFXを導入した個別環境を作成し、配布時に"jdeps"と"jlink"コマンドを叩いてできた環境を使用してます。
Launch4jにてexe化を行い、別PCで無事稼働したので、この手法を採用することにしました。
手順は以下のサイトをそのままなぞっています。

https://qiita.com/ketman55/items/a954dfc2b748559f0920

環境がないなら用意すれば良いという基本的な発想に至らず、今見るとかなり的外れな質問をしておりました。お騒がせしてすみません。

投稿2022/01/10 06:20

kuritake

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問