OpenJDKとEclipseでJavaFXの動作環境の構築
OracleのJDKが有料化されて、Eclipseの標準JDKがAdoptOpenJDKに変更された模様です。この変更に伴って環境構築するとJavaFX動かねーってなりましたので、今回はEclipseでOpenJDKを使い、JavaFX(OpenJFX)を動作させてみます。
Eclipseをダウンロード
Eclipseのダウンロードはこちらのサイトから行います。
2019/01/11時点の最新はEclipse 2018-12です。
ダウンロードしたらzipファイルをWinRARなどの解凍ツールで解凍しておきましょう。
OpenJFXのダウンロード
OpenJFXのダウンロードはこちらのサイトから行います。
今回はバージョン11.0.1を選択しました。
ダウンロードしたら同じくzipファイルをWinRARなどで解凍しておきましょう。解凍場所はどこでもいいですが、私はeclipseのフォルダと同階層に解凍しました。
中にはlibフォルダにjarファイル、binフォルダにdllなどが含まれています。
これらのファイルが存在するか確認しておきましょう。
jarファイルの設定
JavaFXライブラリへの参照設定をします。
プロジェクト右クリック→「ビルドパス」→「ライブラリの追加」を選択
ユーザーライブラリーを選択
新規を選択
任意の名前を付けてOK(ここではlibとします。)
作成したライブラリをクリックして外部jarの追加
ここで解凍したopenjfxのlibフォルダの中にあるjarをすべて選択し、開くを選択。
これでjarの設定は完了です。
dllの設定とモジュール設定
まずは適当なメインクラスのソースコードを作成してください。
今回はTestクラスを作成しました。
次にこのファイルを右クリック→「実行」→「実行の構成」を選択
一覧から「Javaアプリケーション」→「Test」を選択します。
そしてタブの「環境」を選択し、「新規」をクリック。
ここで解凍したopenjfxのbinフォルダへのパスを設定します。実行時にシステムの環境変数を追加してくれるので、この設定をしておけばWindowsの環境変数を汚さずに済みますね。
これでdllの指定は完了です。
次はモジュール設定です。
Java9以降はモジュール機能が追加されており、OpenJDKでJavaFXのライブラリを使用するにはモジュール設定を行う必要があります。
モジュール指定はコマンドライン引数で行いますので、EclipseのVM引数に設定してみます。
さきほどの実行構成の画面で「引数」タブを選択し、VM引数にモジュールエクスポートコマンドを記述しておきます。
--module-path=先ほど解凍したopenjfxフォルダのlibフォルダへのパスを指定
--add-modules=javafx.controls
以上でOpenJDKでJavaFXを実行できる準備が整いました。
テストコードの実行
それではJavaFXのコードを実行できるか試してみましょう。
package com.nompor; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Test extends Application{ @Override public void start(Stage arg0) throws Exception { //パネル定義 Group grp = new Group(); Canvas cvs = new Canvas(300,300); Scene s = new Scene(grp,300,300); //各種パネルセット arg0.setScene(s); grp.getChildren().add(cvs); //ウィンドウ表示 arg0.show(); //描画 GraphicsContext g = cvs.getGraphicsContext2D(); g.setFill(Color.GREEN); g.fillRect(10, 10, 50, 50); } }
どうやらOKのようです。
今回は下記のサイトを参考にして構築しました。
https://skrb.hatenablog.com/entry/2018/05/29/210000
下記のサイトではOpenJDKとOpenJFXをマージしてくれるバッチを作成してくださっているようですので、手っ取り早く使えるようにしたい方は是非利用してみてください。
https://blogs.osdn.jp/2018/11/12/merge-openjfx.html
EclipseでJavaFXを設定する動画
2023/12/10時点でJava21を使用した設定動画です。
ディスカッション
コメント一覧
コメント失礼します
java入門でこれからjavafxを使おうとしてるのですが
どうにもjavafxが動かなくこのサイトに辿り着きました
open jfxのbinへのパスといったものはどう言ったものなのでしょうか
またopen jfxのlibフォルダのパスとの違いがよく分からないんです、、、
open java fx 11.0.2はダウンロード済みです
もう自己解決されたかもしれませんが、お答えします。
>> open jfxのbinへのパスといったものはどう言ったものなのでしょうか
→
openjfxのzipを解凍してできたフォルダ内のbinフォルダが示す配置場所のことです。
binフォルダはJavaFXを動かす為の機能が含まれたライブラリファイルが配置されたフォルダです。
フォルダ内にはdllファイルがありますが、これらはJavaより低級な言語で作成されているライブラリです。
恐らくC言語などで作成されたライブラリになるかと思われます。
eclipseにPATHを設定しておくと、これらdllのライブラリがeclipse上で使えるようになるというわけです。
「open java fx 11.0.2」をダウンロードされたようですので、JavaFXライブラリを配置したい場所に解凍してください。
winrarなどのソフトで解凍すると中に「bin」というフォルダがあると思いますので、
eclipseには、このフォルダへのフルパスを指定しておくのが良いかと思われます。
パスはbinフォルダを開き、↓画像の部分をクリックし、
選択出来たら、右クリック、コピーを選択し、eclipseの環境変数へ右クリック、貼り付けでOKです。
>> open jfxのlibフォルダのパスとの違いがよく分からないんです
→
libフォルダはbinと同じく解凍してできたフォルダ内にあるlibフォルダへの配置場所で、
中にあるファイルが違います。
libフォルダはJavaFXを動作させるためのJavaライブラリが配置されたフォルダです。
libに配置されたjarファイルは基本Javaプログラムで作成されたものになると思われます。
binフォルダはC言語などで作成された動的ライブラリが配置されているフォルダで、
libフォルダはJavaなどで作成されたライブラリが配置されているフォルダというわけです。
JavaFXは、これらのライブラリを利用して動作するもので、どちらが欠けてもいけません。
実際、私たちが、プログラムを書くときはlibフォルダのjarライブラリを呼び出してプログラムを書きますが、
呼び出したjarライブラリからdllのライブラリを呼び出しているのです。これがどっちも設定しなきゃ動かない理由ですかねー。
こちらは上記で説明した方法でパスをコピーし、VM引数のmodule-pathに貼り付けすると、eclipse上からJavaFXモジュールへのアクセスが可能となります。
これでようやくeclipseのビルドパスに設定したjarをeclipse上で呼び出せるようになります。
因みにdllを直接呼び出すコードを私たちが書くこともできます。
とっても面倒くさいんでやる必要はないですが、Javaの仕組みとして、そういう方法があることを理解しておくと今回のような事例で役に立つかもです。
呼び出す方法はこちらの記事で紹介していますので、興味があればちらっとのぞいてみてください。
基本面倒なんで存在だけ知っていてもらえれば良いかなと思います。
既にご存じの内容も含まれていたかもしれませんが、参考になれば幸いです。
返信遅れましたか丁寧な説明ありがとうございます
このサイト通りに設定したのですが、以下のエラーが出て実行できません。どうすればいいですか?
�G���[: ���C���E�N���X?module-path=C:\Users\novah\Downloads\openjfx-20.0.1_monocle-windows-x86_bin-sdk\javafx-sdk-20.0.1\lib�����o����у��[�h�ł��܂���ł���
����: java.lang.ClassNotFoundException: ?module-path=C:\Users\novah\Downloads\openjfx-20.0.1_monocle-windows-x86_bin-sdk\javafx-sdk-20.0.1\lib
記事内の記載がバグによって消えるようで間違った状態で記載されていました。
記事の内容は修正済みです。
VM引数は
--module-path=パス --add-modules=javafx.controls
の形で記述してください
すいません、今後、どうjavaと関わっていこうか考えつつ、ネットをうろついていて、ここに行きつきました。JavaFXの動作環境を整えているのですが、実際にtestコード実行して確かめたいです。packageには慣れてないのですが、package com.nomporのファイルはありますか?あれば、教えてください。
またまた遅くなりましたが、package構文は、自分が作成しているファイルが、どこかを示すものですね。
自分のコードを配置するフォルダのパス(フルパスではなく実行ディレクトリからのパス)と思ってもらって良いです。
eclipseの場合はsrcフォルダ内にパッケージを作ってもらって、そのまま実行で良いと思います。
packageに関連する記事も書いていますので参考にしてみてください(eclipseから開発している方は、この辺の理解が疎かになりやすいかもしれません)
Javaでソース分け、package宣言
ピンバック & トラックバック一覧
[…] OpenJDKとEclipseでJavaFXの動作環境の構築 […]