恐らく、かなり多数の方がラズパイでJAVA FXを実行する方法を探しているかと思うが日本語の情報が少ない為、ここに略記する。
Google先生で検索すると以下の記事が最も気になる。
https://qiita.com/sh1k1ya/items/72d40e6ef8b8cd51e68c
「RaspberryPiでJavaFXとGPIO制御を組み合わせてみる…が、まだ完成していないorz」
参考にしたが、なかなか動作させるに至らなかった
開発ツールはEclipseを使用
EclipseにJAVAFXを導入し、開発する方法は他サイトにゆずる。
<やりたいこと>
〇ラズベリーパイにsambaを導入してwindows上のeclipseでクロス開発環境を構築する
windows10の場合は、プログラムと機能でsambaクライアントを有効にする必要もある
〇シーンビルダーで編集した実行可能jarを自動実行させる
<実行手順略記>
1.SDカードにRasbian OS イメージを書き込み
2.初期設定
3.無線LANの設定
4.sambaのインストール
$/sudo apt-get install samaba
5.smb.conf編集
sudo nano /etc/samba/smb.conf
最終行に追記
[raspberry_pi] comment = Share path = /home/pi/samba public = yes read only = no browsable = yes force user = pi
6./home/piにsambaフォルダを作成$ sudo mkdir /home/pi/samba
7. サービス起動 ※次回以降ラズパイ起動時にも自動起動される$ sudo systemctl restart smbd
8.javafxの配置
・https://openjfx.io/
・JavaFX armv6hf SDKをダウンロードしZIPを解凍
・解凍したファイル群をsambaフォルダに配置
・armv6hf-sdkを右クリック 端末で開く
・パーミッション確認
・パスを通す ※パスを通すことでjavaFXのsoファイルが実行できる
$ export PATH="$PATH:/home/pi/samba/armv6hf-sdk"
・パスの確認
/$ echo PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/pi/samba/armv6hf-sdk
9.sambaに適当なJAVAFXを含む実行可能jarを配置
(例)
・コマンドラインに以下を入力すると実行できる
$ java --module-path /home/pi/samba/armv6hf-sdk/lib --add-modules=javafx.controls,javafx.fxml -jar /home/pi/samaba/test.jar
EclipseでjavaFXプロジェクトを組む方法
1.javaFX - javaFXプロジェクトを作成 2.プロジェクト名を入力 3.ライブラリ追加でユーザーライブラリのJAVAFX11を配置 4.JAVAFX11のネイティブライブライブラリロケーションを設定 (例)C:\javafx-sdk-11.0.2\bin 5.宣言的UIの言語をFXMLを選択 名前などは適宜変更 6.完了 7.XXX.fxmlをシーンビルダーで編集 XXXXController.javaにコードを記載 8.実行環境hはjava8を使用 java13を使っても良いがコマンドライン引数にモジュール化の宣言必要 9.実行可能jarを作成 ユーザーライブラリのJAVAFX11はパッケージ化必要 10./home/pi/samba に配置し実行権限付与 ※sambaで共有させたラズベリーパイ側のフォルダに直接出力 11.以下、例に従いテスト実行$ java --module-path /home/pi/samba/armv6hf-sdk/lib --add-modules=javafx.controls,javafx.fxml -jar /home/pi/samaba/test.jar
12.自動起動の設定以下コマンドを実行して、autostartファイルの雛形を、ホームディレクトリのコンフィグにコピー
$ mkdir -p ~/.config/lxsession/LXDE-pi $ cp /etc/xdg/lxsession/LXDE-pi/autostart ~/.config/lxsession/LXDE-pi/
13.autostartを編集
$ sudo nano ~/.config/lxsession/LXDE-pi/autostart
設定ファイル末尾に追記
@java --module-path /home/pi/samba/armv6hf-sdk/lib --add-modules=javafx.controls,javafx.fxml -jar /home/pi/samaba/test.jar
14.再起動し自動起動を確認最後に
ポイントはJavaFXの*.soファイルがある場所にパスを通すことと、実行時にモジュール化の引数を入れること今回の、方法だとmediaplayerが例外が出て動かない。
ffmpegが、インストールされてない?よくわからない
うまく行ったら、また記載する
2020/7/14
JAVAFXを動かす方法が別に見つかったので記載する 以下のコマンドでbellsoftのJDKをインストールでき、sudo update-alternativesで切り替えもできる 前記の方法を見つけるのに相当時間を要したのに.....Orz...cd /home/pi wget https://download.bell-sw.com/java/13/bellsoft-jdk13-linux-arm32-vfp-hflt.deb sudo apt-get install ./bellsoft-jdk13-linux-arm32-vfp-hflt.deb sudo update-alternatives --config javac sudo update-alternatives --config java
<注意>
ラズパイのjavafxではなぜかMP3が再生できない。wavに変換してから使用せねばならない
前記の方法でmediaplayerで例外が出ていたのもこの理由..orz.orz...
変換には無料のRealPlayerを使った。広告がうざいが..
<2020/08/03追記>
13のautostartにコマンドを記述する場合、WindowsのBATファイルの様にCD /home/piなどと記述しても意味がない
java -jar /home/pi/samba/test.jar と絶対パスで記述しないと認識もしないし、起動時にエラーも出ない