猛禽洛的程式筆記庫

[Raspberry Pi] 在樹莓派上執行JavaFx 8的應用程式

最近嘗試在Raspberry Pi 3b 上使用Raspberry Pi OS來執行之前寫好的JavaFx 8應用程式,不過遇到了許多障礙,有的是找不到套件庫、有的是找不到類別,總而言之就是無法順利執行。

目前Raspberry Pi OS內建的JAVA為11版,其實也有內建JavaFx (openjfx),但也許是版本相容性的關係,有些程式能開啟卻無法正確執行(尤其是有另外安裝套件庫的)。

因為這篇文章主要是執行現有的JavaFx 8應用程式,所以完全拋棄內建安裝的Java,重新來過。

1.檢查現在的Java版本:

pi@raspberrypi:~ $ java -version
openjdk version "11.0.9.1" 2020-11-04 
OpenJDK Runtime Environment (build 11.0.9.1+1-post-Raspbian-1deb10u2) OpenJDK Server VM (build 11.0.9.1+1-post-Raspbian-1deb10u2, mixed mode)

這邊可以看到,使用的版本為:11.0.9.1

 

2.安裝舊版Java:

sudo apt update
sudo apt install openjdk-8-jdk

ps.如何移除舊版Java?

移除預設的Java

sudo apt remove default-jdk

移除指定的Java

sudo apt remove openjdk-8-jdk

 

3.將Java 8設定為預設Java:

pi@raspberrypi:~ $ sudo update-alternatives --config java
替代項目 java(提供 /usr/bin/java)有 2 個選擇。

  選項       路徑                                          優先權  狀態
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-armhf/bin/java      1111      自動模式
  1            /usr/lib/jvm/java-11-openjdk-armhf/bin/java      1111      手動模式
  2            /usr/lib/jvm/java-8-openjdk-armhf/jre/bin/java   1081      手動模式

按下 <enter> 鍵以保留目前選項[*],或是輸入選擇編號:

以我的機位為例,就是輸入2

 

4.確認版本

再輸入一次java -version來確認目前執行的Java版本

pi@raspberrypi:~ $ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b01-1+rpi1-b01)
OpenJDK Client VM (build 25.212-b01, mixed mode)

這樣子就切換過來了!

 

這邊可以發現,目前的Java環境版本為build 1.8.0_212-8u212,不支援JavaFx,所以我們要另外下載JavaFx。

到Gluon的網站中下載ARM版的JavaFx:https://gluonhq.com/products/mobile/javafxports/get/

版本為:8.60.12

 

下載後解壓縮到方便的地方,會有個資料夾叫做armv6hf-sdk

到目前為止,Java的環境與JavaFx的SDK都準備好了,可以用以下指令來執行看看

架構:

-Djava.ext.dirs=<path to armv6hf-sdk>/rt/lib/ext

以我的機器為例:

sudo java -Djava.ext.dirs=/home/pi/Desktop/armv6hf-sdk/rt/lib/ext -jar /home/pi/Desktop/JavaFXApp/JavaFXApp.jar

這邊建議用sudo執行,如果程式有用到i/o的功能,可能會有權限不足的情形發生。

成功!!

目前遇到的問題為:畫面位置會整個跑掉,程式以外的部分全部變黑色,有可能造成程式無法退出,只能強制斷電。

ps.將armv6hf-sdk的資料整合至現有的Java中就不用每次都用這麼長的指令:

cd armv6hf-sdk
sudo mv lib/javafx-mx.jar /opt/jdk1.8.0_111/lib/
cd rt/lib/
sudo mv j* /opt/jdk1.8.0_111/jre/lib/
sudo mv arm/* /opt/jdk1.8.0_111/jre/lib/arm/
sudo mv ext/* /opt/jdk1.8.0_111/jre/lib/ext/

 

~待更新~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *