teratail header banner
teratail header banner
質問するログイン新規登録

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

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

新規登録して質問してみよう
ただいま回答率
85.30%
JavaFX

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

Java

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

Eclipse

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

Q&A

解決済

1回答

2030閲覧

EclipseでJavaFXのプログラムが実行できません.

tmakita

総合スコア70

JavaFX

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

Java

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

Eclipse

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

0グッド

0クリップ

投稿2021/08/24 16:04

0

0

背景

JavaFXでプログラムを作らなければならなくなりました."Hello World!"レベルのものはJDK8で出来ています.
しかし今後のことも考えるとJDK8では古すぎると思いJDK11+Eclipseでプロジェクトを作ってみたのですがRunでエラーになってしまい解決方法がわかりません.ご教示いただければ幸いです.

テストに使用したプログラム

以下のURLのものです.このままだとそもそも画像をこのURLに置いてくれていない、画像が真っ黒になって表示されない.など不具合がありましたので、WikiPediaのイメージを借りて、若干画像サイズを調整するなどしてJDK8では動いています.

https://github.com/Apress/pro-javafx-9/tree/master/chapter1/HelloEarthRise/src/main/java/projavafx/helloearthrise/ui

上記プログラム実行スナップ

JDK11の環境作成

JDK11

JDKはAdoptOpenJDKを使いました.
https://adoptium.net/
バージョンは11.0.12+7

JavaFX

JavaFXはGluonのものを使いました.
https://gluonhq.com/products/javafx/

バージョンは11.0.12

Scene Builder

このプログラムでは不要ですのでダウンロードはしましたが使っていません.
https://gluonhq.com/products/scene-builder/

バージョンは16.0 (Support 11 and higher)

Eclipse

最新のはずです.
Version: 2021-06 (4.20.0)
Build id: 20210612-2011

Eclipseでのプロジェクト作成

以下のJavaFX and Eclipse⇒Non-modular from IDEを参考に進めたつもりです.
https://openjfx.io/openjfx-docs/#install-javafx

ユーザーライブラリの作成

OpenJFXという名称にして作成しプロジェクトに入れています.

プロジェクトのスナップ

Run Configuration

VM argumentとして以下を指定しています.

--module-path "D:\My_Documents\download\OpenJFX\javafx-sdk-11.0.2\lib" --add-modules "javafx.controls,javafx.base,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web,javafx-swt"

コマンドラインは以下のようになります.

C:\Users\toshi.p2\pool\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_14.0.2.v20200815-0932\jre\bin\javaw.exe --module-path "D:\My_Documents\download\OpenJFX\javafx-sdk-11.0.2\lib" --add-modules javafx.controls,javafx.base,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web,javafx-swt -Dfile.encoding=MS932 -classpath "D:\My_Documents\Proj\pro-javafx-9\pro-javafx-9-master\chapter1\HelloEarthRise2\HelloEarthRise\bin" projavafx.helloearthrise.ui.HelloEarthRiseMain

参考にしたURLでは

Warning: Make sure the checkbox "Use the -XstartOnFirstThread argument when launching with SWT" is not checked.

とありますが、使用しているEclipseではこのチェックボックスは出てきませんでした.

EclipseからのRunの結果

Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx-swt not found

であえなく落ちてしまいます.

この解決方法をご教示ください.

以上 よろしくお願いいたします.

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

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

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

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

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

guest

回答1

0

自己解決

このようにVM argumentを指定しなければならないのは、JDK11よりJavaFXがJDKより分離されたためです.
今回の場合ユーザーライブラリとしてプロジェクトに登録していますのでコンパイルエラーは出ませんが、実行させる場合に手数が必要になります.

従って直接的な解決になっていませんが、JDK11にJavaFXをマージしてしまえばこのような必要性はなくなります.

JDK11, JavaFXのマージ

以下のサイトの方法を参考にさせていただきました.

OpenJDK 11にJavaFXを導入する

マージしたJDKの配置

AdoptOpenJDKは.msiパッケージでインストールしてしまったため、いったんアンインストールし、マージしたJDK11をC:\Program Files\Java\jdk-11.0.12+7におきました.

Eclipseプロジェクトの変更

以下のようにC:\Program Files\Java\jdk-11.0.12+7をJRE System Libraryとして指定しました.

プロジェクトのスナップショット

結果

  • もちろんコンパイルエラーは報告されません.
  • 質問のところで記述したRun⇒Run configurationsのVM argumentsは削除しました.
  • Run⇒Run As⇒1.Java Applicationでプログラムは正常動作しました.質問で示した、実行スナップショットと同じ画面が表示されました.

直接的な解決方法ではありませんが、少なくともこの先に進めるようになりました.

以上 失礼いたしました.

投稿2021/08/25 11:17

tmakita

総合スコア70

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問