前提・実現したいこと
JDK11を使用し始めましたが、まだわからないことだらけです.
まずJavaFXを使用したHellp World!アプリのプロジェクトを作成しました.Eclipse上で動作が確認できています.(つまりちゃんと動いています)
実行可能JARをエキスポートして、更に配布用のJREを作成しました.実行可能JAR+配布用のJREでプログラムが動くようにしたいです.
問題点
実行可能JARを配布用のJREのjava.exeで動かすと、アプリケーションの背景画像が表示されません.実行可能JARをJDK11のjava.exeで動かすとアプリケーションの背景画像はちゃんと表示されます.
実行環境作成
JDK11
Oracle Open JDKを落としました.
Java Platform, Standard Edition 11 Reference Implementations
JavaFX
以下のGluonのを落としました.バージョンは11.0.12です.
Gluon
JDKのマージ
いちいち、--module-path, --add-modulesをやらなければならないのは手間であるため、以下のURLを参考にさせていただいて、JDKとJavaFXをマージしました.
マージしたJDKは、C:\PROGRA~1\Java\jdk-11 に置いています.
Eclipse
たぶん最新です.
Version: 2021-06 (4.20.0)
Build id: 20210612-2011
問題発生までの経緯
Eclipseでのプロジェクト作成
以下のような感じです.C:\PROGRA~1\Java\jdk-11は"oracle-open-jdk-11"の名前でライブラリ登録してあります.)
実行可能JARの作成
Eclipseの以下の画面で作成しました.
jdepsの実行
以下の実行結果でした.
PS D:\My_Documents\Proj\pro-javafx-9\pro-javafx-9-master\chapter1\HelloEarthRise2> cmd /c C:\PROGRA~1\Java\jdk-11\bin\jdeps.exe --module-path C:\PROGRA~1\Java\jdk-11\lib -s HelloEarthRise.jar HelloEarthRise.jar -> java.base HelloEarthRise.jar -> javafx.base HelloEarthRise.jar -> javafx.controls HelloEarthRise.jar -> javafx.graphics javafx.base -> java.base javafx.base -> java.desktop javafx.controls -> java.base javafx.controls -> javafx.base javafx.controls -> javafx.graphics javafx.fxml -> java.base javafx.fxml -> java.scripting javafx.fxml -> java.xml javafx.fxml -> javafx.base javafx.fxml -> javafx.graphics javafx.graphics -> java.base javafx.graphics -> java.desktop javafx.graphics -> java.xml javafx.graphics -> javafx.base javafx.graphics -> jdk.unsupported javafx.media -> JDK removed internal API javafx.media -> java.base javafx.media -> javafx.base javafx.media -> javafx.graphics javafx.swing -> java.base javafx.swing -> java.datatransfer javafx.swing -> java.desktop javafx.swing -> javafx.base javafx.swing -> javafx.graphics javafx.swing -> jdk.unsupported.desktop javafx.swt -> java.base javafx.swt -> javafx.base javafx.swt -> javafx.graphics javafx.swt -> not found javafx.web -> java.base javafx.web -> java.desktop javafx.web -> java.xml javafx.web -> javafx.base javafx.web -> javafx.controls javafx.web -> javafx.graphics javafx.web -> javafx.media javafx.web -> jdk.jsobject javafx.web -> jdk.xml.dom jrt.fs -> java.base
jlinkの実行結果
以下になります.
PS D:\My_Documents\Proj\pro-javafx-9\pro-javafx-9-master\chapter1\HelloEarthRise2> cmd /c C:\PROGRA~1\Java\jdk-11\bin\jlink.exe --compress=2 --module-path C:\PROGRA~1\Java\jdk-11\jmods --add-modules java.base,javafx.base,javafx.controls,javafx.graphics --output jre-min PS D:\My_Documents\Proj\pro-javafx-9\pro-javafx-9-master\chapter1\HelloEarthRise2> tree jre-min Folder PATH listing for volume ボリューム Volume serial number is AC93-7CE8 D:\MY_DOCUMENTS\PROJ\PRO-JAVAFX-9\PRO-JAVAFX-9-MASTER\CHAPTER1\HELLOEARTHRISE2\JRE-MIN ├─bin │ └─server ├─conf │ └─security │ └─policy │ ├─limited │ └─unlimited ├─include │ └─win32 ├─legal │ ├─java.base │ ├─java.datatransfer │ ├─java.desktop │ ├─java.prefs │ ├─java.xml │ ├─javafx.base │ ├─javafx.controls │ ├─javafx.graphics │ └─jdk.unsupported └─lib ├─security └─server
試したこと
JDK11のjava.exeで実行した場合
コマンドラインは以下の通り、ちゃんとアプリケーションの背景画像が表示されます.
PS D:\My_Documents\Proj\pro-javafx-9\pro-javafx-9-master\chapter1\HelloEarthRise2> cmd /c C:\PROGRA~1\Java\jdk-11\bin\java -jar HelloEarthRise.jar
配布用のJREで実行した場合
コマンドラインは以下の通り、アプリケーションは起動しますが背景画像が欠落します.
PS D:\My_Documents\Proj\pro-javafx-9\pro-javafx-9-master\chapter1\HelloEarthRise2> cmd /c D:\My_Documents\Proj\pro-javafx-9\pro-javafx-9-master\chapter1\HelloEarthRise2\jre-min\bin\java.exe -jar HelloEarthRise.jar
該当のソースコード
以下から持ってきています.ただし画像が当該のURLに置かれていない、そのままだと真っ黒の背景になってしまうなどありましたので、若干手を加えてあります.
※ コードを入れると文字数オーバーで投稿できないため修正部分のみ以下に記述します.
java
1 // Create an ImageView containing the Image 2 Image image = new Image("https://upload.wikimedia.org/wikipedia/commons/8/87/Apollo_10_earthrise.jpg"); 3 ImageView iv = new ImageView(image); 4 iv.setFitWidth(1024); 5 iv.setPreserveRatio(true); 6 iv.setSmooth(true); 7 iv.setCache(true);
java
1 // Combine ImageView and Group 2 Group root = new Group(iv, scrollPane); 3 Scene scene = new Scene(root, 1024, 1024);
補足情報(FW/ツールのバージョンなど)
Windows 10で実行しております.
以上 ご教示いただければ幸いです.
あなたの回答
tips
プレビュー