JavaFX

JDK 21 と JavaFX 22 の開発環境構築と HelloWorld アプリ作成ガイド

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

JDK 21 のインストールとパス設定

JDK 21 は LTS 版として Oracle 社や Eclipse Adoptium から配布されています。以下は Windows 環境を例にした手順です。他 OS(macOS / Linux)でも同様の流れでインストールできます。

  1. ダウンロード
  2. Windows: jdk-21_windows-x64_bin.exe
  3. macOS (Intel): jdk-21_osx-x64_bin.dmg
  4. macOS (Apple Silicon): jdk-21_osx-aarch64_bin.dmg
  5. Linux: jdk-21_linux-x64_bin.tar.gz

  6. インストール(デフォルト設定で問題ありません)

  7. 環境変数の設定

変数名 設定内容 補足
JAVA_HOME JDK のインストールディレクトリ例
Windows: C:\\Program Files\\Java\\jdk-21
macOS/Linux: /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
必ず フルパスを指定してください。
PATH %JAVA_HOME%\\bin(Windows)
$JAVA_HOME/bin(macOS / Linux)
Windows はセミコロン ;、Unix 系はコロン : で区切ります。

設定が完了したら、端末で次のコマンドを実行しバージョンが表示されることを確認します。


JavaFX 22 SDK の取得と環境変数設定

JavaFX は OpenJFX プロジェクトが提供するスタンドアロン SDK として配布されています。以下の手順でダウンロード・展開し、ビルドツールや IDE が参照できるように環境変数を設定します。

ダウンロードと解凍

OS ダウンロード URL(例)
Windows https://download.openjfx.io/openjfx-22_windows-x64_bin-sdk.zip
macOS (Intel) https://download.openjfx.io/openjfx-22_osx-x64_bin-sdk.zip
macOS (Apple Silicon) https://download.openjfx.io/openjfx-22_osx-aarch64_bin-sdk.zip
Linux https://download.openjfx.io/openjfx-22_linux-x64_bin-sdk.zip

ダウンロードした zip を任意のディレクトリに展開します。例として Windows に展開した場合は次のようになります。

注意:Markdown のコードブロック内では Windows パスをエスケープするため、バックスラッシュは 2 つ書きます(C:\\javafx-sdk-22)。

環境変数 PATH_TO_FX を設定

公式ドキュメントでは PATH_TO_FX が推奨されており、IDE やビルドツールのデフォルト参照先として利用できます。JAVA_HOME と同様に OS 別の記法で設定してください。

PATH へは JavaFX の実行ファイルが必要なケース(例: jpackage --runtime-image)だけ追加し、通常の開発では --module-path オプションで直接参照します。

設定が正しく反映されたか確認します。


IDE とビルドツールのセットアップ

IDE の導入と、Maven・Gradle それぞれの最小構成を比較します。ここでは IntelliJ IDEA Community EditionVisual Studio Code を例に挙げますが、他のエディタでも同様の手順で設定できます。


IntelliJ IDEA Community の JavaFX サポート

IntelliJ IDEA 2024.2 以降は JavaFX ランタイムサポートが標準機能 として組み込まれています。プラグインを別途インストールする必要はありませんが、以下の手順で設定を確認すると安心です。

  1. JetBrains の公式サイトから IntelliJ IDEA Community Edition をダウンロードしインストールします。
  2. 起動後、File → Project Structure → Modules でプロジェクトモジュールを選択し、Dependencies タブに javafx-controlsjavafx-fxml が自動的に追加されているか確認します(無い場合は手動で AddLibraryFrom Maven を利用)。
  3. Run/Debug 設定 で VM オプションに以下を追記し、モジュールパスを指示します。

ポイント:IDE のビルドツール(Maven/Gradle)と同様に --module-path を設定すれば、IDE 内でも実行・デバッグがシームレスになります。


Visual Studio Code の拡張機能

VS Code は軽量でプラグイン駆動のエディタです。以下の拡張を導入すると JavaFX 開発が快適になります。

拡張名 主な機能
Java Extension Pack (Red Hat) Java 言語サポート、Maven/Gradle 連携
vscode-javafx javafx ランタイムパス自動検出、コード補完
FXML Language Support FXML シンタックスハイライト・バリデーション

拡張をインストールしたら、.vscode/settings.json に環境変数参照を追加します。


Maven と Gradle のテンプレート比較

共通前提

  • JDK 21 を使用(toolchain 設定推奨)
  • JavaFX SDK は PATH_TO_FX 環境変数で指すディレクトリに展開済み

以下のテンプレートは Java 9+ モジュラー構成 を前提としています。module-info.java と合わせて使用してください。

Maven(pom.xml)

Gradle(build.gradle)

選び方のポイント

ビルドツール メリット デメリット
Maven プロジェクト構造が標準化されており、企業向けで信頼性が高い XML が冗長になることがある
Gradle DSL がシンプルで高速。プラグインが豊富 初学者には Groovy/Kotlin の文法がややハードル

プロジェクト構成とモジュール設定

Java 9 以降は module‑system がデフォルトです。この章では最低限必要な module-info.java と、IDE・ビルドツールとの連携ポイントを解説します。

module-info.java の基本構成(導入文)

以下のファイルは src/main/java/module-info.java に配置し、プロジェクト全体で使用する JavaFX モジュールを宣言します。モジュール化により不要なクラスがランタイムに含まれず、パッケージサイズが小さくなります。

ポイント
- requires は実際に使用するモジュールだけ列挙します。不要なモジュールは省くほどイメージが軽くなります。
- opens ... to javafx.fxml が無いと、FXML のコントローラで @FXML フィールドやハンドラが認識されません。

Maven / Gradle と module‑info の連携(導入文)

Maven と Gradle の両方とも、上記 module-info.java を自動的にコンパイル対象に含めます。ここで重要なのは モジュールパスの指定 です。ビルドプラグインが --module-path ${PATH_TO_FX}/lib を付与することで、IDE でも同様の環境が再現されます。

ビルドツール モジュールパス設定例
Maven <arg>--module-path</arg><arg>${javafx.sdk}/lib</arg>
Gradle (JavaFX プラグイン) javafx { ... } が内部で --module-path を生成

Hello World アプリの作成と UI デザイン

ここでは コードベースFXML + Scene Builder の 2 通りで「Hello World」アプリを実装します。両方の手順を示すことで、プロジェクトの拡張性や保守性の違いが分かります。


コードベースでのシンプル実装(導入文)

最小限の JavaFX アプリは Application を継承し、start() メソッド内でシーンを構築します。以下は Windows パス表記もエスケープした形です。

実行手順(Maven)

実行手順(Gradle)


FXML と Scene Builder を使った UI 作成(導入文)

FXML は UI のレイアウトを XML で記述でき、デザイナー (Scene Builder) とコードの分離が容易です。

  1. Scene Builder のインストール
  2. 公式スタンドアロン版は https://gluonhq.com/products/scene-builder/ からダウンロードし、PATH に追加しておくと scenebuilder コマンドで起動できます。

  3. FXML ファイル作成src/main/resources/com/example/hellofx/MainView.fxml

  1. コントローラ(空実装で OK)

  1. 起動クラス(FXML 読み込み版)

ポイントFXMLLoader.load() の引数はクラスパス上のリソースを表すので、必ず / から始めるか getResourceAsStream を利用してください。


デバッグ時によくあるエラーと対処法(導入文)

エラーメッセージ 主な原因 推奨対策
java.lang.module.FindException: Module javafx.controls not found ビルドツールの module‑path が未設定 Maven/Gradle の compilerArgs--module-path ${PATH_TO_FX}/lib を追記し、IDE の Run Configuration でも同様に設定
javafx.fxml.LoadException: Cannot resolve resource FXML ファイルがクラスパス上に見つからない src/main/resources 配下に配置し、ビルド後の JAR に含まれているか確認 (jar tf target/*.jar)
IllegalStateException: Toolkit not initialized JavaFX スレッド外で UI 操作を行った UI 更新は必ず Platform.runLater(() -> { /* UI code */ }) または Task<V> を使用
java.lang.NoClassDefFoundError: javafx/application/Application JRE がモジュラーモードで起動していない --module-path--add-modules=javafx.controls,javafx.fxml を VM オプションに追加

ネイティブパッケージングとベストプラクティス

完成したアプリを OS 固有の実行可能形式(.exe、.dmg、.deb 等)に変換すれば、エンドユーザーは JDK を別途インストールする必要がなくなります。公式が推奨する手順は jlink + jpackage の組み合わせです。


1. jlink で最小ランタイムイメージを作成(導入文)

  • --module-pathJavaFX SDK の lib ディレクトリ と、アプリケーション JAR が依存しているモジュールをカンマ区切りで指定します。
  • Windows ではパス区切り文字はセミコロン ;、Unix 系(macOS / Linux)ではコロン : を使用してください。

2. jpackage によるインストーラ作成(導入文)

OS 主なオプション例
Windows bash jpackage \
--type exe \
--name HelloFX \
--app-version 1.0.0 \
--input target/classes \
--main-jar hellofx.jar \
--module-path "$PATH_TO_FX/lib;dist/runtime" \
--main-module com.example.hellofx/com.example.hellofx.MainApp \
--win-console \
--win-dir-chooser \
--icon src/main/resources/icon.ico
macOS bash jpackage \
--type dmg \
--name HelloFX \
--app-version 1.0.0 \
--input target/classes \
--main-jar hellofx.jar \
--module-path "$PATH_TO_FX/lib:dist/runtime" \
--main-module com.example.hellofx/com.example.hellofx.MainApp \
--icon src/main/resources/icon.icns \
--mac-package-identifier com.example.hellofx \
--mac-sign \
--mac-notarization=none
Linux (Debian/Ubuntu) bash jpackage \
--type deb \
--name hello-fx \
--app-version 1.0.0 \
--input target/classes \
--main-jar hellofx.jar \
--module-path "$PATH_TO_FX/lib:dist/runtime" \
--main-module com.example.hellofx/com.example.hellofx.MainApp \
--icon src/main/resources/icon.png \
--linux-shortcut \
--linux-package-name hello-fx \
--linux-deb-maintainer "Your Name you@example.com" \
--linux-rpm-license GPL-3.0+

macOS のサンドボックス化(追加説明)

macOS で配布する場合は、App Sandbox が必要になるケースがあります。jpackage では次のオプションで有効化できます。

entitlements.plist は Apple のドキュメントに沿って作成し、ファイルアクセスやネットワーク権限を宣言します。

Linux の依存関係(追加説明)

Debian 系ディストリビューションでは GTK3 が必要です。インストールが不足していると起動時に java.lang.UnsatisfiedLinkError: libgtk-3.so が発生します。配布パッケージに次の依存関係を明示してください。


3. 開発時に避けるべき落とし穴と推奨手法(導入文)

項目 落とし穴例 ベストプラクティス
リソースパス getResource("image.png")null になる リソースは必ず src/main/resources 配下に配置し、取得時は /com/example/.../image.png のように絶対パスで参照
マルチモジュール構成 依存関係が曖昧になりコンパイルエラー 各機能をサブモジュール化し、requires transitive で公開範囲を制御。module-info.java は常に最新の依存リストに保つ
UI スレッド管理 バックグラウンドタスクから直接 UI を更新 → Not on FX application thread エラー javafx.concurrent.Task<V>Service クラスで非同期処理し、完了ハンドラは Platform.runLater で UI に反映
ビルドツールのバージョン 古い Maven が Java 21 の toolchain を認識できない ビルドプラグインは常に最新版(Maven 3.9+、Gradle 8.x)を使用し、mvn -v / gradle --version で確認
パッケージング時の OS 固有設定 Windows の --win-console を付け忘れ、コンソールが表示されずデバッグ困難 各 OS 用スクリプトを別ファイルに分割し、CI/CD パイプラインで自動生成する

まとめ

  • JDK 21JavaFX 22(リリース前) を環境変数 JAVA_HOME / PATH_TO_FX で管理し、OS 毎のパス区切り文字に注意すればどのプラットフォームでも同一手順が適用可能です。
  • IntelliJ IDEA は標準で JavaFX サポートを提供しているため、追加プラグインは必須ではありませんが、VM オプションでモジュールパスを明示すると確実です。
  • Maven と Gradle のテンプレート を使い分けることで、チームやプロジェクト規模に合わせたビルド環境が構築できます。
  • module-info.java によるモジュール化はランタイムサイズ削減とセキュリティ向上に直結します。必ず requiresopens を正しく記述してください。
  • jlink + jpackage の組み合わせで、Windows .exe, macOS .dmg, Linux .deb/.rpm へ容易にパッケージングできます。macOS のサンドボックスや Linux の GTK 依存関係など OS 固有のオプションを忘れずに設定してください。

以上の手順とベストプラクティスに従えば、初心者でも安全かつ効率的に JavaFX アプリ開発環境を構築し、クロスプラットフォーム向けに配布できるようになります。 Happy coding!

スポンサードリンク

-JavaFX